258 lines
5.5 KiB
ArmAsm
258 lines
5.5 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 op_bkpt.s
|
|
|
|
# .386
|
|
# .MODEL FLAT, C
|
|
|
|
.include "linkage.si"
|
|
.INCLUDE "g_msf.si"
|
|
|
|
.sbttl opp_zstepret
|
|
# PAGE +
|
|
.DATA
|
|
.extern frame_pointer
|
|
.extern zstep_level
|
|
|
|
.text
|
|
.extern gtm_fetch
|
|
.extern op_retarg
|
|
.extern op_zbreak
|
|
.extern op_zst_break
|
|
.extern op_zst_over
|
|
.extern op_zstepret
|
|
.extern opp_ret
|
|
|
|
# PUBLIC opp_zstepret
|
|
ENTRY opp_zstepret
|
|
movq frame_pointer(REG_IP),REG64_ACCUM
|
|
movw msf_typ_off(REG64_ACCUM),REG16_SCRATCH1
|
|
testw $1,REG16_SCRATCH1
|
|
je l1
|
|
movq zstep_level(REG_IP),REG64_ARG2
|
|
cmpq REG64_ACCUM,REG64_ARG2
|
|
jg l1
|
|
call op_zstepret
|
|
l1: jmp opp_ret
|
|
|
|
# PUBLIC opp_zstepretarg
|
|
ENTRY opp_zstepretarg
|
|
pushq REG64_RET0
|
|
pushq REG64_RET1
|
|
movq frame_pointer(REG_IP),REG64_ACCUM
|
|
movw msf_typ_off(REG64_ACCUM),REG16_ARG2
|
|
testw $1,REG16_ARG2
|
|
je l2
|
|
movq zstep_level(REG_IP),REG64_ARG2
|
|
cmpq REG64_ACCUM, REG64_ARG2
|
|
jg l2
|
|
call op_zstepret
|
|
l2: popq REG64_RET1
|
|
popq REG64_RET0
|
|
jmp op_retarg
|
|
# opp_zstepretarg ENDP
|
|
|
|
# PUBLIC op_zbfetch
|
|
ENTRY op_zbfetch
|
|
movq frame_pointer(REG_IP),REG64_ACCUM
|
|
popq msf_mpc_off(REG64_ACCUM)
|
|
movb $0,REG8_ACCUM # variable length argumentt
|
|
call gtm_fetch
|
|
#popq REG64_ACCUM
|
|
#leaq (REG_SP,REG64_ACCUM,8),REG_SP
|
|
movq frame_pointer(REG_IP),REG64_ARG0
|
|
call op_zbreak
|
|
getframe
|
|
ret
|
|
# op_zbfetch ENDP
|
|
|
|
# PUBLIC op_zbstart
|
|
ENTRY op_zbstart
|
|
movq frame_pointer(REG_IP),REG64_ARG0
|
|
popq msf_mpc_off(REG64_ARG0)
|
|
call op_zbreak
|
|
getframe
|
|
ret
|
|
# op_zbstart ENDP
|
|
|
|
# PUBLIC op_zstepfetch
|
|
ENTRY op_zstepfetch
|
|
movq frame_pointer(REG_IP),REG64_ACCUM
|
|
popq msf_mpc_off(REG64_ACCUM)
|
|
movb $0,REG8_ACCUM # variable length argument
|
|
call gtm_fetch
|
|
#popq REG64_ACCUM
|
|
#leaq (REG_SP,REG64_ACCUM,8),REG_SP
|
|
call op_zst_break
|
|
getframe
|
|
ret
|
|
# op_zstepfetch ENDP
|
|
|
|
# PUBLIC op_zstepstart
|
|
ENTRY op_zstepstart
|
|
movq frame_pointer(REG_IP),REG64_ARG2
|
|
popq msf_mpc_off(REG64_ARG2)
|
|
call op_zst_break
|
|
getframe
|
|
ret
|
|
# op_zstepstart ENDP
|
|
|
|
# PUBLIC op_zstzbfetch
|
|
ENTRY op_zstzbfetch
|
|
movq frame_pointer(REG_IP),REG64_ACCUM
|
|
popq msf_mpc_off(REG64_ACCUM)
|
|
movb $0,REG8_ACCUM # variable length argument
|
|
call gtm_fetch
|
|
#popq REG64_ACCUM
|
|
#leaq (REG_SP,REG64_ACCUM,8),REG_SP
|
|
movq frame_pointer(REG_IP),REG64_ARG0
|
|
call op_zbreak
|
|
call op_zst_break
|
|
getframe
|
|
ret
|
|
# op_zstzbfetch ENDP
|
|
|
|
# PUBLIC op_zstzbstart
|
|
ENTRY op_zstzbstart
|
|
movq frame_pointer(REG_IP),REG64_ARG0
|
|
popq msf_mpc_off(REG64_ARG0)
|
|
call op_zbreak
|
|
call op_zst_break
|
|
getframe
|
|
ret
|
|
# op_zstzbstart ENDP
|
|
|
|
# PUBLIC op_zstzb_fet_over
|
|
ENTRY op_zstzb_fet_over
|
|
movq frame_pointer(REG_IP),REG64_ACCUM
|
|
popq msf_mpc_off(REG64_ACCUM)
|
|
movb $0,REG8_ACCUM # variable length argument
|
|
call gtm_fetch
|
|
#popq REG64_ACCUM
|
|
#leaq (REG_SP,REG64_ACCUM,8),REG_SP
|
|
movq frame_pointer(REG_IP),REG64_ARG0
|
|
call op_zbreak
|
|
movq zstep_level(REG_IP),REG64_ARG2
|
|
movq frame_pointer(REG_IP), REG64_SCRATCH1
|
|
cmpq REG64_SCRATCH1,REG64_ARG2
|
|
jae l3
|
|
cmpl $0,REG32_RET0
|
|
jne l5
|
|
jmp l4
|
|
|
|
l3: call op_zst_break
|
|
l4: getframe
|
|
ret
|
|
|
|
l5: call op_zst_over
|
|
movq frame_pointer(REG_IP),REG64_ARG2
|
|
pushq msf_mpc_off(REG_IP)
|
|
ret
|
|
# op_zstzb_fet_over ENDP
|
|
|
|
# PUBLIC op_zstzb_st_over
|
|
ENTRY op_zstzb_st_over
|
|
movq frame_pointer(REG_IP),REG64_ARG0
|
|
popq msf_mpc_off(REG64_ARG0)
|
|
call op_zbreak
|
|
movq zstep_level(REG_IP),REG64_ARG0
|
|
movq frame_pointer(REG_IP),REG64_SCRATCH1
|
|
cmpq REG64_SCRATCH1,REG64_ARG0
|
|
jae l6
|
|
cmpl $0,REG32_RET0
|
|
jne l8
|
|
jmp l7
|
|
|
|
l6: call op_zst_break
|
|
l7: getframe
|
|
ret
|
|
|
|
l8: call op_zst_over
|
|
movq frame_pointer(REG_IP),REG64_ARG0
|
|
pushq msf_mpc_off(REG64_ARG0)
|
|
ret
|
|
# op_zstzb_st_over ENDP
|
|
|
|
# PUBLIC op_zst_fet_over
|
|
ENTRY op_zst_fet_over
|
|
movq frame_pointer(REG_IP),REG64_ACCUM
|
|
popq msf_mpc_off(REG64_ACCUM)
|
|
movb $0,REG8_ACCUM # variable length argument
|
|
call gtm_fetch
|
|
#popq REG64_ACCUM
|
|
#leaq (REG_SP,REG64_ACCUM,8),REG_SP
|
|
movq zstep_level(REG_IP),REG64_ACCUM
|
|
movq frame_pointer(REG_IP),REG64_SCRATCH1
|
|
cmpq REG64_SCRATCH1,REG64_ACCUM
|
|
jg l9
|
|
call op_zst_break
|
|
getframe
|
|
ret
|
|
|
|
l9: call op_zst_over
|
|
movq frame_pointer(REG_IP),REG64_ACCUM
|
|
pushq msf_mpc_off(REG64_ACCUM)
|
|
ret
|
|
# op_zst_fet_over ENDP
|
|
|
|
# PUBLIC op_zst_st_over
|
|
ENTRY op_zst_st_over
|
|
movq frame_pointer(REG_IP),REG64_ACCUM
|
|
popq msf_mpc_off(REG64_ACCUM)
|
|
movq zstep_level(REG_IP),REG64_ARG2
|
|
cmpq REG64_ACCUM,REG64_ARG2
|
|
jg l10
|
|
call op_zst_break
|
|
getframe
|
|
ret
|
|
|
|
l10: call op_zst_over
|
|
movq frame_pointer(REG_IP),REG64_ARG2
|
|
pushq msf_mpc_off(REG64_ARG2)
|
|
ret
|
|
# op_zst_st_over ENDP
|
|
|
|
# PUBLIC opp_zst_over_ret
|
|
ENTRY opp_zst_over_ret
|
|
movq frame_pointer(REG_IP),REG64_ACCUM
|
|
movw msf_typ_off(REG64_ACCUM),REG16_ARG2
|
|
testw $1,REG16_ARG2
|
|
je l11
|
|
movq zstep_level(REG_IP),REG64_ARG2
|
|
movq msf_old_frame_off(REG64_ACCUM),REG64_ACCUM
|
|
cmpq REG64_ACCUM,REG64_ARG2
|
|
jg l11
|
|
call op_zstepret
|
|
l11: jmp opp_ret
|
|
# opp_zst_over_ret ENDP
|
|
|
|
# PUBLIC opp_zst_over_retarg
|
|
ENTRY opp_zst_over_retarg
|
|
pushq REG64_RET0
|
|
pushq REG64_RET1
|
|
movq frame_pointer(REG_IP),REG64_ACCUM
|
|
movw msf_typ_off(REG64_ACCUM),REG16_ARG2
|
|
testw $1,REG16_ARG2
|
|
je l12
|
|
movq zstep_level(REG_IP),REG64_ARG2
|
|
movq msf_old_frame_off(REG64_ACCUM),REG64_ACCUM
|
|
cmpq REG64_ACCUM,REG64_ARG2
|
|
jg l12
|
|
call op_zstepret
|
|
l12: popq REG64_RET1
|
|
popq REG64_RET0
|
|
jmp op_retarg
|
|
# opp_zst_over_retarg ENDP
|
|
|
|
# END
|