fis-gtm/sr_i386/op_neg.s

65 lines
1.3 KiB
ArmAsm

#################################################################
# #
# Copyright 2001, 2008 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_neg.s
# .386
# .MODEL FLAT, C
.include "linkage.si"
.INCLUDE "mval_def.si"
.sbttl op_neg
# PAGE +
.text
#
# op_neg ( mval *u, mval *v ) : u = -v
#
# edx - source mval = &v
# eax - destination mval = &u
.extern s2n
.extern underr
# PUBLIC op_neg
ENTRY op_neg
pushl %eax
mv_force_defined %edx, isdefined
popl %eax
mv_if_number %edx, numer
pushl %eax
pushl %edx
call s2n
popl %edx
popl %eax
numer: mv_if_notint %edx, float
movw $mval_m_int,mval_w_mvtype(%eax)
movl mval_l_m1(%edx),%edx
negl %edx
movl %edx,mval_l_m1(%eax)
ret
float: pushl %ebx # need a temp register
movw $mval_m_nm,mval_w_mvtype(%eax)
movb mval_b_exp(%edx),%bl
xorb $mval_esign_mask,%bl # flip the sign bit
movb %bl,mval_b_exp(%eax)
movl mval_l_m0(%edx),%ebx
movl %ebx,mval_l_m0(%eax)
movl mval_l_m1(%edx),%ebx
movl %ebx,mval_l_m1(%eax)
popl %ebx
ret
# op_neg ENDP
#END