@@ -2326,16 +2326,62 @@ static int zend_jit_trace_exit_stub(dasm_State **Dst)
23262326{
23272327 |->trace_exit:
23282328 |
2329- | // TODO: Save CPU registers ???
2329+ | // Save CPU registers
2330+ |.if X64
2331+ | sub r4, 16*8+16*8-8 /* CPU regs + SSE regs */
2332+ | mov aword [r4+11*8], r11
2333+ | mov aword [r4+10*8], r10
2334+ | mov aword [r4+9*8], r9
2335+ | mov aword [r4+8*8], r8
2336+ | mov aword [r4+7*8], rdi
2337+ | mov aword [r4+6*8], rsi
2338+ | mov aword [r4+2*8], rdx
2339+ | mov aword [r4+1*8], rcx
2340+ | mov aword [r4+0*8], rax
2341+ | mov FCARG1a, aword [r4+16*8+16*8-8] // exit_num = POP
2342+ | mov FCARG2a, r4
2343+ | movsd qword [r4+16*8+15*8], xmm15
2344+ | movsd qword [r4+16*8+14*8], xmm14
2345+ | movsd qword [r4+16*8+13*8], xmm13
2346+ | movsd qword [r4+16*8+12*8], xmm12
2347+ | movsd qword [r4+16*8+11*8], xmm11
2348+ | movsd qword [r4+16*8+10*8], xmm10
2349+ | movsd qword [r4+16*8+9*8], xmm9
2350+ | movsd qword [r4+16*8+8*8], xmm8
2351+ | movsd qword [r4+16*8+7*8], xmm7
2352+ | movsd qword [r4+16*8+6*8], xmm6
2353+ | movsd qword [r4+16*8+5*8], xmm5
2354+ | movsd qword [r4+16*8+4*8], xmm4
2355+ | movsd qword [r4+16*8+3*8], xmm3
2356+ | movsd qword [r4+16*8+2*8], xmm2
2357+ | movsd qword [r4+16*8+1*8], xmm1
2358+ | movsd qword [r4+16*8+0*8], xmm0
2359+ |.else
2360+ | sub r4, 8*4+8*8-4 /* CPU regs + SSE regs */
2361+ | mov aword [r4+2*4], edx
2362+ | mov aword [r4+1*4], ecx
2363+ | mov aword [r4+0*4], eax
2364+ | mov FCARG1a, aword [r4+8*4+8*8-4] // exit_num = POP
2365+ | mov FCARG2a, r4
2366+ | movsd qword [r4+8*4+7*8], xmm7
2367+ | movsd qword [r4+8*4+6*8], xmm6
2368+ | movsd qword [r4+8*4+5*8], xmm5
2369+ | movsd qword [r4+8*4+4*8], xmm4
2370+ | movsd qword [r4+8*4+3*8], xmm3
2371+ | movsd qword [r4+8*4+2*8], xmm2
2372+ | movsd qword [r4+8*4+1*8], xmm1
2373+ | movsd qword [r4+8*4+0*8], xmm0
2374+ |.endif
23302375 |
2331- | // trace_num = EG(reserved)[zend_func_info_rid]
2332- | MEM_OP2_2_ZTS mov, FCARG1a, aword, executor_globals, reserved[zend_func_info_rid], r0
2333- | // exit_num = POP
2334- | pop FCARG2a
23352376 | // EX(opline) = opline
23362377 | SAVE_OPLINE
23372378 | // zend_jit_trace_exit(trace_num, exit_num)
23382379 | EXT_CALL zend_jit_trace_exit, r0
2380+ |.if X64
2381+ | add r4, 16*8+16*8 /* CPU regs + SSE regs */
2382+ |.else
2383+ | add r4, 8*4+8*8 /* CPU regs + SSE regs */
2384+ |.endif
23392385 | // execute_data = EG(current_excute_data)
23402386 | MEM_OP2_2_ZTS mov, FP, aword, executor_globals, current_execute_data, r0
23412387 | test eax, eax
0 commit comments