66 lines
1.9 KiB
ArmAsm
66 lines
1.9 KiB
ArmAsm
|
#################################################################
|
||
|
# #
|
||
|
# Copyright 2007, 2010 Fidelity Information Services, Inc #
|
||
|
# #
|
||
|
# This source code contains the intellectual property #
|
||
|
# of its copyright holder(s), and is made available #
|
||
|
# under a license. If you do not know the terms of #
|
||
|
# the license, please stop and do not read further. #
|
||
|
# #
|
||
|
#################################################################
|
||
|
|
||
|
# PAGE ,132
|
||
|
.title opp_tstart.s
|
||
|
|
||
|
# .386
|
||
|
# .MODEL FLAT, C
|
||
|
|
||
|
.include "linkage.si"
|
||
|
.INCLUDE "g_msf.si"
|
||
|
|
||
|
.sbttl opp_tstart
|
||
|
# PAGE +
|
||
|
.DATA
|
||
|
.extern frame_pointer # /* :DWORD */
|
||
|
|
||
|
.text
|
||
|
.extern op_tstart
|
||
|
|
||
|
# PUBLIC opp_tstart
|
||
|
ENTRY opp_tstart # /* PROC */
|
||
|
putframe
|
||
|
addq $8, REG_SP # burn the return pc
|
||
|
enter $8, $0 # pull a small stack, used only for saving the incoming $rsp value.
|
||
|
# But make sure that the $rsp is 16 byte aligned
|
||
|
movl REG32_ARG2,REG32_ACCUM
|
||
|
cmpl $0,REG32_ACCUM
|
||
|
je no_arg
|
||
|
cmpl $1,REG32_ACCUM
|
||
|
je arg_1
|
||
|
cmpl $2,REG32_ACCUM
|
||
|
je arg_2
|
||
|
subl $3,REG32_ACCUM #3 arguments are already in register
|
||
|
cltq
|
||
|
leaq (REG_FRAME_POINTER,REG64_ACCUM,8),REG64_SCRATCH1
|
||
|
again: pushq (REG64_SCRATCH1)
|
||
|
subq $8,REG64_SCRATCH1
|
||
|
subq $1,REG64_ACCUM
|
||
|
cmpq $0,REG64_ACCUM
|
||
|
jg again
|
||
|
pushq REG64_ARG5
|
||
|
arg_2: movq REG64_ARG4,REG64_ARG5
|
||
|
arg_1: movq REG64_ARG3,REG64_ARG4
|
||
|
no_arg: movq REG64_ARG2,REG64_ARG3
|
||
|
movq REG64_ARG1,REG64_ARG2
|
||
|
movq REG64_ARG0,REG64_ARG1
|
||
|
movl $0,REG32_ARG0 # arg0: NOT an implicit op_tstart() call
|
||
|
movb $0,REG8_ACCUM # variable length argument
|
||
|
call op_tstart
|
||
|
leave # restore $rsp
|
||
|
getframe
|
||
|
ret
|
||
|
# opp_tstart ENDP
|
||
|
|
||
|
# END
|
||
|
|