@@ -62,21 +62,7 @@ NESTED_ENTRY _ZN2Js21InterpreterStackFrame33AsmJsDelayDynamicInterpreterThunkEPN
6262 push r8
6363 push r9
6464
65- sub rsp , 40h
66-
67- // spill potential floating point arguments to stack
68- movaps xmmword ptr [ rsp + 00h ], xmm0
69- movaps xmmword ptr [ rsp + 10h ], xmm1
70- movaps xmmword ptr [ rsp + 20h ], xmm2
71- movaps xmmword ptr [ rsp + 30h ], xmm3
7265 call C_FUNC(_ZN2Js21InterpreterStackFrame29EnsureDynamicInterpreterThunkEPNS_14ScriptFunctionE)
73- // restore potential floating point arguments from stack
74- movaps xmm0 , xmmword ptr [ rsp + 00h ]
75- movaps xmm1 , xmmword ptr [ rsp + 10h ]
76- movaps xmm2 , xmmword ptr [ rsp + 20h ]
77- movaps xmm3 , xmmword ptr [ rsp + 30h ]
78-
79- add rsp , 40h
8066
8167 pop r9
8268 pop r8
@@ -190,13 +176,6 @@ NESTED_ENTRY _ZN2Js21InterpreterStackFrame19InterpreterAsmThunkEPNS_20AsmJsCallS
190176
191177 set_cfa_register rbp , ( 2 * 8 ) // Set to compute CFA as: rbp + 16 (sizeof: [ rbp ] [ ReturnAddress ] )
192178
193- sub rsp , 40h
194-
195- // spill potential floating point arguments to stack
196- movaps xmmword ptr [ rsp + 00h ], xmm0
197- movaps xmmword ptr [ rsp + 10h ], xmm1
198- movaps xmmword ptr [ rsp + 20h ], xmm2
199- movaps xmmword ptr [ rsp + 30h ], xmm3
200179
201180 // save argument registers used by custom calling convention
202181 push rdi
@@ -210,7 +189,6 @@ NESTED_ENTRY _ZN2Js21InterpreterStackFrame19InterpreterAsmThunkEPNS_20AsmJsCallS
210189
211190 call rax // call appropriate template
212191
213- add rsp , 40h
214192 pop_nonvol_reg rbp
215193 ret
216194NESTED_END _ZN2Js21InterpreterStackFrame19InterpreterAsmThunkEPNS_20AsmJsCallStackLayoutE , _TEXT
@@ -260,64 +238,8 @@ NESTED_ENTRY _ZN2Js23AsmJsExternalEntryPointEPNS_16RecyclableObjectENS_8CallInfo
260238 call C_FUNC(_ZN2Js19UnboxAsmJsArgumentsEPNS_14ScriptFunctionEPPvPcNS_8CallInfoE)
261239 // rax = target function address
262240
263- // move first 4 arguments into registers.
264- // don't know types other than arg0 (which is ScriptFunction * ) , so put in both xmm and general purpose registers
265241 mov rdi , r12 // arg0: func
266242
267- // int GetArgsSizesArray(ScriptFunction * func)
268- // get args sizes of target asmjs function
269- // rdi has ScriptFunction *
270- push r13
271- push rax
272- push rdi
273- sub rsp , 8h
274- call C_FUNC(_ZN2Js17GetArgsSizesArrayEPNS_14ScriptFunctionE)
275- mov r13 , rax // r13 : arg size
276- add rsp , 8h
277- pop rdi
278- pop rax
279-
280- // NOTE: Below xmm usage is non - standard.
281-
282- // Move 3 args to regs per convention. rdi already has first arg: ScriptFunction *
283- push r12
284- // r12 - >unboxed args
285- lea r12 , [ rsp + 18h ] // rsp + size of( r12 + r13 + ScriptFunction * )
286-
287- // r13 is arg size
288- cmp dword ptr [ r13 ], 10h
289- je SIMDArg2
290- mov rsi , [ r12 ] // arg1
291- movq xmm1 , qword ptr [ r12 ] // arg1
292- add r12 , 8h
293- jmp Arg3
294- SIMDArg2:
295- movups xmm1 , xmmword ptr [ r12 ]
296- add r12 , 10h
297- Arg3:
298- cmp dword ptr [ r13 + 4h ], 10h
299- je SIMDArg3
300- mov rdx , [ r12 ] // arg2
301- movq xmm2 , qword ptr [ r12 ] // arg2
302- add r12 , 8h
303- jmp Arg4
304- SIMDArg3:
305- movups xmm2 , xmmword ptr [ r12 ]
306- add r12 , 10h
307- Arg4:
308- cmp dword ptr [ r13 + 8h ], 10h
309- je SIMDArg4
310- mov rcx , [ r12 ] // arg3
311- movq xmm3 , qword ptr [ r12 ] // arg3
312- jmp ArgsDone
313- SIMDArg4:
314- movups xmm3 , xmmword ptr [ r12 ]
315-
316- ArgsDone:
317- pop r12 // r12 : func
318- pop r13 // r13 : orig stack pointer
319-
320- // "home" arg0. other args were read from stack and already homed.
321243 mov [ rsp + 00h ], rdi
322244
323245 // call entry point
0 commit comments