|
Lines 3206-3212
void testSimplePatchpointWithoutOuputClo
Source/JavaScriptCore/b3/testb3.cpp_sec1
|
| 3206 |
Value* const2 = root->appendNew<Const64Value>(proc, Origin(), 13); |
3206 |
Value* const2 = root->appendNew<Const64Value>(proc, Origin(), 13); |
| 3207 |
|
3207 |
|
| 3208 |
PatchpointValue* patchpoint = root->appendNew<PatchpointValue>(proc, Void, Origin()); |
3208 |
PatchpointValue* patchpoint = root->appendNew<PatchpointValue>(proc, Void, Origin()); |
| 3209 |
patchpoint->clobber(RegisterSet(GPRInfo::argumentGPR0, GPRInfo::argumentGPR1)); |
3209 |
patchpoint->clobberLate(RegisterSet(GPRInfo::argumentGPR0, GPRInfo::argumentGPR1)); |
| 3210 |
patchpoint->append(ConstrainedValue(const1, ValueRep::SomeRegister)); |
3210 |
patchpoint->append(ConstrainedValue(const1, ValueRep::SomeRegister)); |
| 3211 |
patchpoint->append(ConstrainedValue(const2, ValueRep::SomeRegister)); |
3211 |
patchpoint->append(ConstrainedValue(const2, ValueRep::SomeRegister)); |
| 3212 |
patchpoint->setGenerator( |
3212 |
patchpoint->setGenerator( |
|
Lines 3249-3255
void testSimplePatchpointWithOuputClobbe
Source/JavaScriptCore/b3/testb3.cpp_sec2
|
| 3249 |
clobberAll.exclude(RegisterSet::stackRegisters()); |
3249 |
clobberAll.exclude(RegisterSet::stackRegisters()); |
| 3250 |
clobberAll.exclude(RegisterSet::reservedHardwareRegisters()); |
3250 |
clobberAll.exclude(RegisterSet::reservedHardwareRegisters()); |
| 3251 |
clobberAll.clear(GPRInfo::argumentGPR2); |
3251 |
clobberAll.clear(GPRInfo::argumentGPR2); |
| 3252 |
patchpoint->clobber(clobberAll); |
3252 |
patchpoint->clobberLate(clobberAll); |
| 3253 |
|
3253 |
|
| 3254 |
patchpoint->append(ConstrainedValue(const1, ValueRep::SomeRegister)); |
3254 |
patchpoint->append(ConstrainedValue(const1, ValueRep::SomeRegister)); |
| 3255 |
patchpoint->append(ConstrainedValue(const2, ValueRep::SomeRegister)); |
3255 |
patchpoint->append(ConstrainedValue(const2, ValueRep::SomeRegister)); |
|
Lines 3286-3292
void testSimplePatchpointWithoutOuputClo
Source/JavaScriptCore/b3/testb3.cpp_sec3
|
| 3286 |
Value* const2 = root->appendNew<ConstDoubleValue>(proc, Origin(), 13.1); |
3286 |
Value* const2 = root->appendNew<ConstDoubleValue>(proc, Origin(), 13.1); |
| 3287 |
|
3287 |
|
| 3288 |
PatchpointValue* patchpoint = root->appendNew<PatchpointValue>(proc, Void, Origin()); |
3288 |
PatchpointValue* patchpoint = root->appendNew<PatchpointValue>(proc, Void, Origin()); |
| 3289 |
patchpoint->clobber(RegisterSet(FPRInfo::argumentFPR0, FPRInfo::argumentFPR1)); |
3289 |
patchpoint->clobberLate(RegisterSet(FPRInfo::argumentFPR0, FPRInfo::argumentFPR1)); |
| 3290 |
patchpoint->append(ConstrainedValue(const1, ValueRep::SomeRegister)); |
3290 |
patchpoint->append(ConstrainedValue(const1, ValueRep::SomeRegister)); |
| 3291 |
patchpoint->append(ConstrainedValue(const2, ValueRep::SomeRegister)); |
3291 |
patchpoint->append(ConstrainedValue(const2, ValueRep::SomeRegister)); |
| 3292 |
patchpoint->setGenerator( |
3292 |
patchpoint->setGenerator( |
|
Lines 3322-3328
void testSimplePatchpointWithOuputClobbe
Source/JavaScriptCore/b3/testb3.cpp_sec4
|
| 3322 |
clobberAll.exclude(RegisterSet::stackRegisters()); |
3322 |
clobberAll.exclude(RegisterSet::stackRegisters()); |
| 3323 |
clobberAll.exclude(RegisterSet::reservedHardwareRegisters()); |
3323 |
clobberAll.exclude(RegisterSet::reservedHardwareRegisters()); |
| 3324 |
clobberAll.clear(FPRInfo::argumentFPR2); |
3324 |
clobberAll.clear(FPRInfo::argumentFPR2); |
| 3325 |
patchpoint->clobber(clobberAll); |
3325 |
patchpoint->clobberLate(clobberAll); |
| 3326 |
|
3326 |
|
| 3327 |
patchpoint->append(ConstrainedValue(const1, ValueRep::SomeRegister)); |
3327 |
patchpoint->append(ConstrainedValue(const1, ValueRep::SomeRegister)); |
| 3328 |
patchpoint->append(ConstrainedValue(const2, ValueRep::SomeRegister)); |
3328 |
patchpoint->append(ConstrainedValue(const2, ValueRep::SomeRegister)); |
|
Lines 3348-3353
void testSimplePatchpointWithOuputClobbe
Source/JavaScriptCore/b3/testb3.cpp_sec5
|
| 3348 |
CHECK(compileAndRun<double>(proc, 1.5, 2.5) == 59.6); |
3348 |
CHECK(compileAndRun<double>(proc, 1.5, 2.5) == 59.6); |
| 3349 |
} |
3349 |
} |
| 3350 |
|
3350 |
|
|
|
3351 |
void testPatchpointWithEarlyClobber() |
| 3352 |
{ |
| 3353 |
auto test = [] (GPRReg registerToClobber, bool arg1InArgGPR, bool arg2InArgGPR) { |
| 3354 |
Procedure proc; |
| 3355 |
BasicBlock* root = proc.addBlock(); |
| 3356 |
Value* arg1 = root->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0); |
| 3357 |
Value* arg2 = root->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR1); |
| 3358 |
|
| 3359 |
PatchpointValue* patchpoint = root->appendNew<PatchpointValue>(proc, Int32, Origin()); |
| 3360 |
patchpoint->append(ConstrainedValue(arg1, ValueRep::SomeRegister)); |
| 3361 |
patchpoint->append(ConstrainedValue(arg2, ValueRep::SomeRegister)); |
| 3362 |
patchpoint->clobberEarly(RegisterSet(registerToClobber)); |
| 3363 |
patchpoint->setGenerator( |
| 3364 |
[&] (CCallHelpers& jit, const StackmapGenerationParams& params) { |
| 3365 |
CHECK((params.reps[1].gpr() == GPRInfo::argumentGPR0) == arg1InArgGPR); |
| 3366 |
CHECK((params.reps[2].gpr() == GPRInfo::argumentGPR1) == arg2InArgGPR); |
| 3367 |
|
| 3368 |
if (params.reps[0].gpr() == params.reps[2].gpr()) { |
| 3369 |
jit.move(params.reps[2].gpr(), params.reps[0].gpr()); |
| 3370 |
jit.add32(params.reps[1].gpr(), params.reps[0].gpr()); |
| 3371 |
} else { |
| 3372 |
jit.move(params.reps[1].gpr(), params.reps[0].gpr()); |
| 3373 |
jit.add32(params.reps[2].gpr(), params.reps[0].gpr()); |
| 3374 |
} |
| 3375 |
}); |
| 3376 |
|
| 3377 |
root->appendNew<ControlValue>(proc, Return, Origin(), patchpoint); |
| 3378 |
|
| 3379 |
CHECK(compileAndRun<int>(proc, 1, 2) == 3); |
| 3380 |
}; |
| 3381 |
|
| 3382 |
test(GPRInfo::nonArgGPR0, true, true); |
| 3383 |
test(GPRInfo::argumentGPR0, false, true); |
| 3384 |
test(GPRInfo::argumentGPR1, true, false); |
| 3385 |
} |
| 3386 |
|
| 3351 |
void testPatchpointCallArg() |
3387 |
void testPatchpointCallArg() |
| 3352 |
{ |
3388 |
{ |
| 3353 |
Procedure proc; |
3389 |
Procedure proc; |
|
Lines 5717-5722
void run(const char* filter)
Source/JavaScriptCore/b3/testb3.cpp_sec6
|
| 5717 |
RUN(testSimplePatchpointWithOuputClobbersGPArgs()); |
5753 |
RUN(testSimplePatchpointWithOuputClobbersGPArgs()); |
| 5718 |
RUN(testSimplePatchpointWithoutOuputClobbersFPArgs()); |
5754 |
RUN(testSimplePatchpointWithoutOuputClobbersFPArgs()); |
| 5719 |
RUN(testSimplePatchpointWithOuputClobbersFPArgs()); |
5755 |
RUN(testSimplePatchpointWithOuputClobbersFPArgs()); |
|
|
5756 |
RUN(testPatchpointWithEarlyClobber()); |
| 5720 |
RUN(testPatchpointCallArg()); |
5757 |
RUN(testPatchpointCallArg()); |
| 5721 |
RUN(testPatchpointFixedRegister()); |
5758 |
RUN(testPatchpointFixedRegister()); |
| 5722 |
RUN(testPatchpointAny()); |
5759 |
RUN(testPatchpointAny()); |