Unemulated instructions on uVax (old news) +FIX
Rick Lindsley
richl at penguin.USS.TEK.COM
Wed Mar 23 18:17:52 AEST 1988
This is old news, but necessary news for those installing the previously
posted diffs to be able to use 4.3 on a uVax. Some instructions are not
provided in the uVax instruction set, and emulations need to be provided
for them. Others claim to be emulated when, in fact, they aren't.
Rick
#!/bin/sh
#
# This is a shell archive. Remove anything before the above #! line,
# then unpack it by saving it in a file and typing "sh file". (Files
# unpacked will be owned by you and have default permissions.)
#
# This archive contains:
# vax.emulate.s.diff
# vax.locore.s.diff
# vax.mtpr.h.diff
echo x - vax.emulate.s.diff
cat > "vax.emulate.s.diff" << '//E*O*F vax.emulate.s.diff//'
*** /tmp/,RCSt1010377 Wed Dec 9 14:25:53 1987
--- emulate.s Tue Dec 8 14:10:02 1987
***************
*** 3,8
*/
#ifdef VAX630
/*
* String instruction emulation - MicroVAX only. These routines are called
* from locore.s when an "emulate" fault occurs on the MicroVAX. They are
--- 3,11 -----
*/
#ifdef VAX630
+ .data
+ .asciz "$Header: emulate.s,v 1.3 87/12/08 14:08:36 russ Exp $"
+ .text
/*
* String instruction emulation - MicroVAX only. These routines are called
* from locore.s when an "emulate" fault occurs on the MicroVAX. They are
***************
*** 55,64
_EMcrc:
argl(1,r11) # (1) table address == r11
argl(2,r0) # (2) initial crc == r0
! toarg(r8,1) # save r8 in arg1 spot
! argl(4,r8) # (4) source address == r8
! toarg(r1,4) # save r1 in arg4 spot
! tstl arg3 # (3) source length == "arg3"
jeql Lcrc_out
Lcrc_loop:
xorb2 (r8)+,r0
--- 58,65 -----
_EMcrc:
argl(1,r11) # (1) table address == r11
argl(2,r0) # (2) initial crc == r0
! argl(4,r3) # (4) source address == r3
! arguw(3,r2) # (3) source length == r2
jeql Lcrc_out
Lcrc_loop:
xorb2 (r3)+,r0
***************
*** 61,67
tstl arg3 # (3) source length == "arg3"
jeql Lcrc_out
Lcrc_loop:
! xorb2 (r8)+,r0
extzv $0,$4,r0,r10
extzv $4,$28,r0,r1
xorl3 r1,(r11)[r10],r0
--- 62,68 -----
arguw(3,r2) # (3) source length == r2
jeql Lcrc_out
Lcrc_loop:
! xorb2 (r3)+,r0
extzv $0,$4,r0,r10
extzv $4,$28,r0,r1
xorl3 r1,(r11)[r10],r0
***************
*** 68,75
extzv $0,$4,r0,r10
extzv $4,$28,r0,r1
xorl3 r1,(r11)[r10],r0
! decl arg3
! jneq Lcrc_loop
tstl r0
Lcrc_out:
savepsl
--- 69,75 -----
extzv $0,$4,r0,r10
extzv $4,$28,r0,r1
xorl3 r1,(r11)[r10],r0
! sobgtr r2,Lcrc_loop
tstl r0
Lcrc_out:
savepsl
***************
*** 73,80
tstl r0
Lcrc_out:
savepsl
! argl(1,r8)
! argl(4,r1)
return
--- 73,79 -----
tstl r0
Lcrc_out:
savepsl
! clrl r1
return
***************
*** 94,102
movzbl (r1)+,r2
movb (r3)[r2],(r5)+
decl r0
! decl r4
! jeql Lmovtc_out
! jbr Lmovtc_loop
Lmovtc_2loop:
movb r11,(r5)+
decl r4
--- 93,100 -----
movzbl (r1)+,r2
movb (r3)[r2],(r5)+
decl r0
! sobgtr r4,Lmovtc_loop
! jbr Lmovtc_out
Lmovtc_2loop:
movb r11,(r5)+
sobgtr r4,Lmovtc_2loop
***************
*** 99,106
jbr Lmovtc_loop
Lmovtc_2loop:
movb r11,(r5)+
! decl r4
! jneq Lmovtc_2loop
Lmovtc_out:
cmpl r4,r0
savepsl
--- 97,103 -----
jbr Lmovtc_out
Lmovtc_2loop:
movb r11,(r5)+
! sobgtr r4,Lmovtc_2loop
Lmovtc_out:
cmpl r4,r0
savepsl
***************
*** 128,135
movzbl (r1)+,r2
movb (r3)[r2],(r5)+
decl r0
! decl r4
! jneq Lmovtuc_loop
Lmovtuc_out:
cmpl r4,r0
savepsl
--- 125,131 -----
movzbl (r1)+,r2
movb (r3)[r2],(r5)+
decl r0
! sobgtr r4,Lmovtuc_loop
Lmovtuc_out:
cmpl r4,r0
savepsl
***************
*** 160,167
jeql Lmatchc_2loop
Lmatchc_fail:
incl r3
! decl r2
! jneq Lmatchc_loop
movl r10,r1
subl3 r10,r11,r0
jbr Lmatchc_out
--- 156,162 -----
jeql Lmatchc_2loop
Lmatchc_fail:
incl r3
! sobgtr r2,Lmatchc_loop
movl r10,r1
subl3 r10,r11,r0
jbr Lmatchc_out
***************
*** 166,171
subl3 r10,r11,r0
jbr Lmatchc_out
Lmatchc_succ:
movl r11,r1
clrl r0
Lmatchc_out:
--- 161,167 -----
subl3 r10,r11,r0
jbr Lmatchc_out
Lmatchc_succ:
+ movl r1,r3
movl r11,r1
clrl r0
Lmatchc_out:
***************
*** 177,183
.globl _EMspanc
_EMspanc:
argl(2,r1) # (2) string address == r1
- argl(3,r3) # (3) table address == r3
argub(4,r2) # (4) character-mask == r2
arguw(1,r0) # (1) string length == r0
jeql Lspanc_out
--- 173,178 -----
.globl _EMspanc
_EMspanc:
argl(2,r1) # (2) string address == r1
argub(4,r2) # (4) character-mask == r2
argl(3,r3) # (3) table address == r3
arguw(1,r0) # (1) string length == r0
***************
*** 179,184
argl(2,r1) # (2) string address == r1
argl(3,r3) # (3) table address == r3
argub(4,r2) # (4) character-mask == r2
arguw(1,r0) # (1) string length == r0
jeql Lspanc_out
Lspanc_loop:
--- 174,180 -----
_EMspanc:
argl(2,r1) # (2) string address == r1
argub(4,r2) # (4) character-mask == r2
+ argl(3,r3) # (3) table address == r3
arguw(1,r0) # (1) string length == r0
jeql Lspanc_out
Lspanc_loop:
***************
*** 187,194
bicb3 r11,r2,r11
jeql Lspanc_out
incl r1
! decl r0
! jneq Lspanc_loop
Lspanc_out:
savepsl
clrl r2
--- 183,189 -----
bicb3 r11,r2,r11
jeql Lspanc_out
incl r1
! sobgtr r0,Lspanc_loop
Lspanc_out:
savepsl
clrl r2
***************
*** 199,205
.globl _EMscanc
_EMscanc:
argl(2,r1) # (2) string address == r1
- argl(3,r3) # (3) table address == r3
argub(4,r2) # (4) character-mask == r2
arguw(1,r0) # (1) string length == r0
jeql Lscanc_out
--- 194,199 -----
.globl _EMscanc
_EMscanc:
argl(2,r1) # (2) string address == r1
argub(4,r2) # (4) character-mask == r2
argl(3,r3) # (3) table address == r3
arguw(1,r0) # (1) string length == r0
***************
*** 201,206
argl(2,r1) # (2) string address == r1
argl(3,r3) # (3) table address == r3
argub(4,r2) # (4) character-mask == r2
arguw(1,r0) # (1) string length == r0
jeql Lscanc_out
Lscanc_loop:
--- 195,201 -----
_EMscanc:
argl(2,r1) # (2) string address == r1
argub(4,r2) # (4) character-mask == r2
+ argl(3,r3) # (3) table address == r3
arguw(1,r0) # (1) string length == r0
jeql Lscanc_out
Lscanc_loop:
***************
*** 209,216
bicb3 r11,r2,r11
jneq Lscanc_out
incl r1
! decl r0
! jneq Lscanc_loop
Lscanc_out:
savepsl
clrl r2
--- 204,210 -----
bicb3 r11,r2,r11
jneq Lscanc_out
incl r1
! sobgtr r0,Lscanc_loop
Lscanc_out:
savepsl
clrl r2
***************
*** 223,229
argub(1,r11) # (1) character == r11
argl(3,r1) # (3) string address == r1
arguw(2,r0) # (2) string length == r0
! incl r0
Lskpc_loop:
decl r0
jeql Lskpc_out
--- 217,223 -----
argub(1,r11) # (1) character == r11
argl(3,r1) # (3) string address == r1
arguw(2,r0) # (2) string length == r0
! jeql Lskpc_out # forget zero length strings
Lskpc_loop:
cmpb (r1),r11
jneq Lskpc_out
***************
*** 225,236
arguw(2,r0) # (2) string length == r0
incl r0
Lskpc_loop:
! decl r0
! jeql Lskpc_out
! cmpb (r1)+,r11
! jeql Lskpc_loop
! decl r1
! tstl r0
Lskpc_out:
savepsl
return
--- 219,228 -----
arguw(2,r0) # (2) string length == r0
jeql Lskpc_out # forget zero length strings
Lskpc_loop:
! cmpb (r1),r11
! jneq Lskpc_out
! incl r1
! sobgtr r0,Lskpc_loop
Lskpc_out:
tstl r0 # be sure of condition codes
savepsl
***************
*** 232,237
decl r1
tstl r0
Lskpc_out:
savepsl
return
--- 224,230 -----
incl r1
sobgtr r0,Lskpc_loop
Lskpc_out:
+ tstl r0 # be sure of condition codes
savepsl
return
***************
*** 242,248
argub(1,r11) # (1) character == r11
argl(3,r1) # (3) string address == r1
arguw(2,r0) # (2) string length == r0
! incl r0
Llocc_loop:
decl r0
jeql Llocc_out
--- 235,241 -----
argub(1,r11) # (1) character == r11
argl(3,r1) # (3) string address == r1
arguw(2,r0) # (2) string length == r0
! jeql Lskpc_out # forget zero length strings
Llocc_loop:
cmpb (r1),r11
jeql Llocc_out
***************
*** 244,250
arguw(2,r0) # (2) string length == r0
incl r0
Llocc_loop:
! decl r0
jeql Llocc_out
cmpb (r1)+,r11
jneq Llocc_loop
--- 237,243 -----
arguw(2,r0) # (2) string length == r0
jeql Lskpc_out # forget zero length strings
Llocc_loop:
! cmpb (r1),r11
jeql Llocc_out
incl r1
sobgtr r0,Llocc_loop
***************
*** 246,255
Llocc_loop:
decl r0
jeql Llocc_out
! cmpb (r1)+,r11
! jneq Llocc_loop
! decl r1
! tstl r0
Llocc_out:
savepsl
return
--- 239,246 -----
Llocc_loop:
cmpb (r1),r11
jeql Llocc_out
! incl r1
! sobgtr r0,Llocc_loop
Llocc_out:
tstl r0 # be sure of condition codes
savepsl
***************
*** 251,256
decl r1
tstl r0
Llocc_out:
savepsl
return
--- 242,248 -----
incl r1
sobgtr r0,Llocc_loop
Llocc_out:
+ tstl r0 # be sure of condition codes
savepsl
return
***************
*** 267,274
jneq Lcmpc3_out
incl r1
incl r3
! decl r0
! jneq Lcmpc3_loop
Lcmpc3_out:
savepsl
movl r0,r2
--- 259,265 -----
jneq Lcmpc3_out
incl r1
incl r3
! sobgtr r0,Lcmpc3_loop
Lcmpc3_out:
savepsl
movl r0,r2
***************
*** 292,299
incl r1
incl r3
decl r2
! decl r0
! jneq Lcmpc5_loop
Lcmpc5_str2:
tstl r2
jeql Lcmpc5_out
--- 283,289 -----
incl r1
incl r3
decl r2
! sobgtr r0,Lcmpc5_loop
Lcmpc5_str2:
tstl r2
jeql Lcmpc5_out
***************
*** 301,308
cmpb r11,(r3)
jneq Lcmpc5_out
incl r3
! decl r2
! jneq Lcmpc5_str2loop
jbr Lcmpc5_out
Lcmpc5_str1loop:
cmpb (r1),r11
--- 291,297 -----
cmpb r11,(r3)
jneq Lcmpc5_out
incl r3
! sobgtr r2,Lcmpc5_str2loop
jbr Lcmpc5_out
Lcmpc5_str1loop:
cmpb (r1),r11
***************
*** 308,315
cmpb (r1),r11
jneq Lcmpc5_out
incl r1
! decl r0
! jneq Lcmpc5_str1loop
Lcmpc5_out:
savepsl
return
--- 297,303 -----
cmpb (r1),r11
jneq Lcmpc5_out
incl r1
! sobgtr r0,Lcmpc5_str1loop
Lcmpc5_out:
savepsl
return
***************
*** 511,518
L144:
insv r9,$4,$4,(r3)
bisl2 r9,r2
! decl r11 # while (--source length)
! jneq Laddp4_same_loop
argl(4,r10) # r10 = destination address of MSNibble
jbr Laddp4_same_carry
Laddp4_same_cloop:
--- 499,505 -----
L144:
insv r9,$4,$4,(r3)
bisl2 r9,r2
! sobgtr r11,Laddp4_same_loop # while (--source length)
argl(4,r10) # r10 = destination address of MSNibble
jbr Laddp4_same_carry
Laddp4_same_cloop:
***************
*** 580,587
Lmovp_copy:
bisb2 (r10),r2 # keep track of non-zero source
movb (r10)+,(r3)+ # move two nibbles
! decl r11 # loop for length of source
! jneq Lmovp_copy
Lmovp_zlen:
extzv $4,$4,(r10),r0 # look at least significant nibble
bisl2 r0,r2
--- 567,573 -----
Lmovp_copy:
bisb2 (r10),r2 # keep track of non-zero source
movb (r10)+,(r3)+ # move two nibbles
! sobgtr r11,Lmovp_copy # loop for length of source
Lmovp_zlen:
extzv $4,$4,(r10),r0 # look at least significant nibble
bisl2 r0,r2
***************
*** 794,801
subl2 r11,r5 # to back up over output and replace
L200:
putfill # with fill character
! decl r11
! jneq L200
jbr Ledit_case
Le_adjust_input:
--- 780,786 -----
subl2 r11,r5 # to back up over output and replace
L200:
putfill # with fill character
! sobgtr r11,L200
jbr Ledit_case
Le_adjust_input:
***************
*** 827,834
jeql Ledit_case
Le_fill_loop:
putfill
! decl r1
! jneq Le_fill_loop
jbr Ledit_case
Le_move:
--- 812,818 -----
jeql Ledit_case
Le_fill_loop:
putfill
! sobgtr r1,Le_fill_loop
jbr Ledit_case
Le_move:
***************
*** 853,860
L219: # else put fill character
putfill
L220:
! decl r1
! jneq L214
jbr Ledit_case
Le_float: # move with floating sign character
--- 837,843 -----
L219: # else put fill character
putfill
L220:
! sobgtr r1,L214
jbr Ledit_case
Le_float: # move with floating sign character
***************
*** 882,889
L227:
putfill
L228:
! decl r1
! jneq L221
jbr Ledit_case
--- 865,871 -----
L227:
putfill
L228:
! sobgtr r1,L221
jbr Ledit_case
***************
*** 899,904
argl(6,r6) # (6) destination address == r6
# we need arg6 for later
# arg1 is used for temporary storage
# arg4 is used as general storage
# arg5 is used as general storage
ashl $-1,r3,r0 # destination length is number of bytes
--- 881,887 -----
argl(6,r6) # (6) destination address == r6
# we need arg6 for later
# arg1 is used for temporary storage
+ # arg2 holds "even or odd" destination length
# arg4 is used as general storage
# arg5 is used as general storage
ashl $-1,r3,r0 # destination length is number of bytes
***************
*** 915,922
jbr L245
Lashp_neg:
movb NEGATIVE,(r6)
! L245: # r3<0> counts digits going into destination
! bisl2 $1,r3 # and is flip-flop for which nibble to
tstl r11 # write in destination (1 = high, 0 = low)
jgeq Lashp_left # (it must start out odd)
addl2 r11,r10 # scale is negative (right shift)
--- 898,909 -----
jbr L245
Lashp_neg:
movb NEGATIVE,(r6)
! L245:
! clrl arg2 # arg2 is 1 if dstlen is even, 0 if odd
! blbs r3,L246
! incl arg2
! bisl2 $1,r3 # r3<0> counts digits going into destination
! L246: # and is flip-flop for which nibble to
tstl r11 # write in destination (1 = high, 0 = low)
jgeq Lashp_left # (it must start out odd)
addl2 r11,r10 # scale is negative (right shift)
***************
*** 943,951
jlbs r3,L257 # don't need to clear high nibble twice
clrb -(r6) # clear low (and high) nib of next byte in dest
L257:
! decl r3 # move to next nibble in destination, but
! jneq L258 # don't go beyond the end.
! incl r3
L258:
decl r11
Lashp_left: # while scale is positive
--- 930,937 -----
jlbs r3,L257 # don't need to clear high nibble twice
clrb -(r6) # clear low (and high) nib of next byte in dest
L257:
! sobgtr r3,L258 # move to next nibble in destination, but
! incl r3 # don't go beyond the end.
L258:
decl r11
Lashp_left: # while scale is positive
***************
*** 956,962
Lashp_shift:
clrl arg4 # arg4 will be used for result condition codes
tstl r10
! jeql Lashp_sethigh
Lashp_shloop:
jlbc r11,L260
extzv $4,$4,(r1),r0
--- 942,948 -----
Lashp_shift:
clrl arg4 # arg4 will be used for result condition codes
tstl r10
! jeql Lashp_round
Lashp_shloop:
jlbc r11,L260
extzv $4,$4,(r1),r0
***************
*** 978,987
L263:
bisl2 arg5,arg4 # remember if result was nonzero in arg4
decl r3 # move to next nibble early to check
! jgeq Lashp_noovfl # if we've moved passed destination limits
! clrl r3 # test the result for possible overflow
! tstl arg5 # ignore zero nibbles
! jeql L265 # if the nibble was non-zero, overflow
jbr Lashp_overfl
Lashp_noovfl: # else
jlbs r3,L264
--- 964,974 -----
L263:
bisl2 arg5,arg4 # remember if result was nonzero in arg4
decl r3 # move to next nibble early to check
! cmpl r3,arg2 # if we've moved passed destination limits
! jgeq Lashp_noovfl # test the result for possible overflow
! movl arg2,r3 # ignore zero nibbles
! tstl arg5 # if the nibble was non-zero, overflow
! jeql L265
jbr Lashp_overfl
Lashp_noovfl: # else
jlbs r3,L264
***************
*** 988,995
insv arg5,$4,$4,(r6) # put the result into destination (high or low)
jbr L265
L264:
! decl r6
! insv arg5,$0,$4,(r6)
L265:
decl r10 # loop for length of source
jneq Lashp_shloop
--- 975,981 -----
insv arg5,$4,$4,(r6) # put the result into destination (high or low)
jbr L265
L264:
! movb arg5,-(r6)
L265:
sobgtr r10,Lashp_shloop # loop for length of source
***************
*** 991,998
decl r6
insv arg5,$0,$4,(r6)
L265:
! decl r10 # loop for length of source
! jneq Lashp_shloop
Lashp_sethigh:
jlbc r3,L266 # if we haven't set the high nibble,
--- 977,983 -----
L264:
movb arg5,-(r6)
L265:
! sobgtr r10,Lashp_shloop # loop for length of source
Lashp_round:
tstl r2 # take care of round out of high nibble
***************
*** 994,1003
decl r10 # loop for length of source
jneq Lashp_shloop
! Lashp_sethigh:
! jlbc r3,L266 # if we haven't set the high nibble,
! insv r2,$4,$4,(r6) # carry the round into the high nibble
! clrl r2
L266:
argl(1,r10) # r10 = address of destination LSNibble
argl(6,r3) # r3 = address of destination MSNibble
--- 979,993 -----
L265:
sobgtr r10,Lashp_shloop # loop for length of source
! Lashp_round:
! tstl r2 # take care of round out of high nibble
! jeql Lashp_zeroround
! decl r3
! cmpl r3,arg2 # if we've moved passed destination limits
! jlss Lashp_overfl # then overflow
! jlbs r3,L266
! insv arg5,$4,$4,(r6) # put the round into destination (high or low)
! jbr Lashp_zeroround
L266:
movb arg5,-(r6)
***************
*** 999,1004
insv r2,$4,$4,(r6) # carry the round into the high nibble
clrl r2
L266:
argl(1,r10) # r10 = address of destination LSNibble
argl(6,r3) # r3 = address of destination MSNibble
movl arg4,r11 # r11 = non-zero if destination == non-zero
--- 989,997 -----
insv arg5,$4,$4,(r6) # put the round into destination (high or low)
jbr Lashp_zeroround
L266:
+ movb arg5,-(r6)
+
+ Lashp_zeroround:
argl(1,r10) # r10 = address of destination LSNibble
argl(6,r3) # r3 = address of destination MSNibble
movl arg4,r11 # r11 = non-zero if destination == non-zero
***************
*** 1005,1012
savepsl
jbr L267
Lashp_zerofill:
! cvtlb r2,-(r6) # fill up MSNs of destination with carry or zero
! clrl r2
L267:
cmpl r3,r6
jneq Lashp_zerofill
--- 998,1004 -----
savepsl
jbr L267
Lashp_zerofill:
! clrb -(r6) # fill up MSNs of destination with zeros
L267:
cmpl r3,r6
jneq Lashp_zerofill
***************
*** 1010,1017
L267:
cmpl r3,r6
jneq Lashp_zerofill
- tstl r2 # if carry beyond destination, overflow
- jneq Lashp_overfl
extzv $0,$4,(r10),r0 # test for negative result
cmpl r0,NEGATIVE
jneq Lashp_out
--- 1002,1007 -----
L267:
cmpl r3,r6
jneq Lashp_zerofill
extzv $0,$4,(r10),r0 # test for negative result
cmpl r0,NEGATIVE
jneq Lashp_out
***************
*** 1099,1106
extzv $0,$4,(r10),r0
addl2 r0,r3 # destination += low nibble
incl r10
! decl r11
! jneq Lcvtpl_loop
Lcvtpl_zero: # least significant byte
mull2 $10,r3
extzv $4,$4,(r10),r0
--- 1089,1095 -----
extzv $0,$4,(r10),r0
addl2 r0,r3 # destination += low nibble
incl r10
! sobgtr r11,Lcvtpl_loop
Lcvtpl_zero: # least significant byte
mull2 $10,r3
extzv $4,$4,(r10),r0
***************
*** 1125,1130
.align 1
.globl _EMcvtps
_EMcvtps:
return
--- 1114,1171 -----
.align 1
.globl _EMcvtps
_EMcvtps:
+ arguw(1,r0) # (1) source length == r0
+ argl(2,r1) # (2) source address == r1
+ arguw(3,r2) # (3) destination length == r2
+ argl(4,r3) # (4) destination address == r3
+ ashl $-1,r0,r0
+ addl2 r0,r1 # r1 = address of last byte
+ extzv $0,$4,(r1),r10 # get sign
+ cmpl r10,NEGATIVE
+ jeql Lcvtps_neg
+ cmpl r10,NEGATIVEalt
+ jeql Lcvtps_neg
+ movb $'+,(r3)+ # stuff an ascii "+" if positive
+ jbr Lcvtps_pos
+ Lcvtps_neg:
+ movb $'-,(r3)+ # stuff an ascii "-" if negative
+ Lcvtps_pos:
+ addl2 r2,r3 # point at end of dest
+ clrl r11 # use r11 to compute condition code
+ jbr Lcvtps_mid # start converting
+ Lcvtps_loop: # main loop to convert digits
+ tstl r2 # is there room in dest?
+ jleq Lcvtps_oflow # no - overflow
+ extzv $0,$4,-(r1),r10 # grab lower nibble
+ addl2 r10,r11 # accumulate something for CC
+ addb3 $'0,r10,-(r3) # make it ascii and stuff it in dest
+ decl r2 # decrement destination counter
+ Lcvtps_mid:
+ tstl r2 # is there room in dest?
+ jleq Lcvtps_oflow # no - overflow
+ extzv $4,$4,(r1),r10 # grab upper nibble
+ addl2 r10,r11 # accumulate something for CC
+ addb3 $'0,r10,-(r3) # make it ascii and stuff it in dest
+ decl r2 # decrement destination counter
+ sobgeq r0,Lcvtps_loop # next word in source
+ tstl r2 # do we need to zero fill destination?
+ jeql Lcvtps_out
+ Lcvtps_fill: # loop to zero fill the destination
+ movb $'0,-(r3)
+ sobgtr r2,Lcvtps_fill
+ Lcvtps_out: # time to get out
+ clrl r0 # fixup registers
+ decl r3
+ cmpb $'+,(r3) # is it positive?
+ jeql Lcvtps_plus
+ mnegl r11,r11 # fixup condition code
+ Lcvtps_plus:
+ tstl r11 # is it non-zero
+ jneq Lcvtps_nonzero
+ movb $'+,(r3) # stuff a plus in case of -0
+ Lcvtps_nonzero:
+ tstl r11 # this sets the real condition codes
+ savepsl
return
Lcvtps_oflow:
clrl r0 # fixup r0 and r1.
***************
*** 1126,1131
.globl _EMcvtps
_EMcvtps:
return
.align 1
--- 1167,1178 -----
tstl r11 # this sets the real condition codes
savepsl
return
+ Lcvtps_oflow:
+ clrl r0 # fixup r0 and r1.
+ argl(2,r1)
+ # r2 and r3 should be OK
+ overflowpsl
+ return
.align 1
***************
*** 1205,1211
/* fc */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
/* 00 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
/* 04 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
! /* 08 */ EMULATE(cvtps); EMULATE(cvtsp); NOEMULATE; EMULATE(crc)
/* 0c */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
/* 10 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
/* 14 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
--- 1252,1258 -----
/* fc */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
/* 00 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
/* 04 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
! /* 08 */ EMULATE(cvtps); NOEMULATE/*(cvtsp)*/; NOEMULATE; EMULATE(crc)
/* 0c */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
/* 10 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
/* 14 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
***************
*** 1211,1218
/* 14 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
/* 18 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
/* 1c */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
! /* 20 */ EMULATE(addp4); EMULATE(addp6); EMULATE(subp4); EMULATE(subp6)
! /* 24 */ EMULATE(cvtpt); EMULATE(mulp); EMULATE(cvttp); EMULATE(divp)
/* 28 */ NOEMULATE; EMULATE(cmpc3); EMULATE(scanc); EMULATE(spanc)
/* 2c */ NOEMULATE; EMULATE(cmpc5); EMULATE(movtc); EMULATE(movtuc)
/* 30 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
--- 1258,1265 -----
/* 14 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
/* 18 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
/* 1c */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
! /* 20 */ EMULATE(addp4); NOEMULATE/*(addp6)*/; NOEMULATE/*(subp4)*/; NOEMULATE/*(subp6)*/
! /* 24 */ NOEMULATE/*(cvtpt)*/; NOEMULATE/*(mulp)*/; NOEMULATE/*(cvttp)*/; NOEMULATE/*(divp)*/
/* 28 */ NOEMULATE; EMULATE(cmpc3); EMULATE(scanc); EMULATE(spanc)
/* 2c */ NOEMULATE; EMULATE(cmpc5); EMULATE(movtc); EMULATE(movtuc)
/* 30 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
***************
*** 1216,1222
/* 28 */ NOEMULATE; EMULATE(cmpc3); EMULATE(scanc); EMULATE(spanc)
/* 2c */ NOEMULATE; EMULATE(cmpc5); EMULATE(movtc); EMULATE(movtuc)
/* 30 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
! /* 34 */ EMULATE(movp); EMULATE(cmpp3); EMULATE(cvtpl); EMULATE(cmpp4)
/* 38 */ EMULATE(editpc); EMULATE(matchc); EMULATE(locc); EMULATE(skpc)
/*
--- 1263,1269 -----
/* 28 */ NOEMULATE; EMULATE(cmpc3); EMULATE(scanc); EMULATE(spanc)
/* 2c */ NOEMULATE; EMULATE(cmpc5); EMULATE(movtc); EMULATE(movtuc)
/* 30 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
! /* 34 */ EMULATE(movp); NOEMULATE/*(cmpp3)*/; EMULATE(cvtpl); NOEMULATE/*(cmpp4)*/
/* 38 */ EMULATE(editpc); EMULATE(matchc); EMULATE(locc); EMULATE(skpc)
/*
//E*O*F vax.emulate.s.diff//
echo x - vax.locore.s.diff
cat > "vax.locore.s.diff" << '//E*O*F vax.locore.s.diff//'
*** /tmp/,RCSt1010380 Wed Dec 9 14:25:43 1987
--- locore.s Thu Dec 3 16:32:43 1987
***************
*** 6,11
* @(#)locore.s 7.1 (Berkeley) 6/5/86
*/
#include "psl.h"
#include "pte.h"
--- 6,14 -----
* @(#)locore.s 7.1 (Berkeley) 6/5/86
*/
+ .data
+ .asciz "$Header: locore.s,v 1.1 87/11/20 09:24:07 russ Exp $"
+ .text
#include "psl.h"
#include "pte.h"
***************
*** 562,568
/* fc */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
/* 00 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
/* 04 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
! /* 08 */ EMULATE(cvtps); EMULATE(cvtsp); NOEMULATE; EMULATE(crc)
/* 0c */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
/* 10 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
/* 14 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
--- 565,571 -----
/* fc */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
/* 00 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
/* 04 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
! /* 08 */ EMULATE(cvtps); NOEMULATE/*(cvtsp)*/; NOEMULATE; EMULATE(crc)
/* 0c */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
/* 10 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
/* 14 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
***************
*** 568,575
/* 14 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
/* 18 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
/* 1c */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
! /* 20 */ EMULATE(addp4); EMULATE(addp6); EMULATE(subp4); EMULATE(subp6)
! /* 24 */ EMULATE(cvtpt); EMULATE(mulp); EMULATE(cvttp); EMULATE(divp)
/* 28 */ NOEMULATE; EMULATE(cmpc3); EMULATE(scanc); EMULATE(spanc)
/* 2c */ NOEMULATE; EMULATE(cmpc5); EMULATE(movtc); EMULATE(movtuc)
/* 30 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
--- 571,578 -----
/* 14 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
/* 18 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
/* 1c */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
! /* 20 */ EMULATE(addp4); NOEMULATE/*(addp6)*/; NOEMULATE/*(subp4)*/; NOEMULATE/*(subp6)*/
! /* 24 */ NOEMULATE/*(cvtpt)*/; NOEMULATE/*(mulp)*/; NOEMULATE/*(cvttp)*/; NOEMULATE/*(divp)*/
/* 28 */ NOEMULATE; EMULATE(cmpc3); EMULATE(scanc); EMULATE(spanc)
/* 2c */ NOEMULATE; EMULATE(cmpc5); EMULATE(movtc); EMULATE(movtuc)
/* 30 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
***************
*** 573,579
/* 28 */ NOEMULATE; EMULATE(cmpc3); EMULATE(scanc); EMULATE(spanc)
/* 2c */ NOEMULATE; EMULATE(cmpc5); EMULATE(movtc); EMULATE(movtuc)
/* 30 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
! /* 34 */ EMULATE(movp); EMULATE(cmpp3); EMULATE(cvtpl); EMULATE(cmpp4)
/* 38 */ EMULATE(editpc); EMULATE(matchc); EMULATE(locc); EMULATE(skpc)
#endif
--- 576,582 -----
/* 28 */ NOEMULATE; EMULATE(cmpc3); EMULATE(scanc); EMULATE(spanc)
/* 2c */ NOEMULATE; EMULATE(cmpc5); EMULATE(movtc); EMULATE(movtuc)
/* 30 */ NOEMULATE; NOEMULATE; NOEMULATE; NOEMULATE
! /* 34 */ EMULATE(movp); NOEMULATE/*(cmpp3)*/; EMULATE(cvtpl); NOEMULATE/*(cmpp4)*/
/* 38 */ EMULATE(editpc); EMULATE(matchc); EMULATE(locc); EMULATE(skpc)
#endif
//E*O*F vax.locore.s.diff//
echo x - vax.mtpr.h.diff
cat > "vax.mtpr.h.diff" << '//E*O*F vax.mtpr.h.diff//'
*** /tmp/,RCSt1010390 Wed Dec 9 14:25:36 1987
--- mtpr.h Thu Jun 11 01:57:31 1987
***************
*** 78,84
#define MBRK 0x3c /* micro-program breakpoint */
#endif
! #if defined(VAX750) || defined(VAX730)
#define MCSR 0x17 /* machine check status register */
#define CSRS 0x1c /* console storage receive status register */
#define CSRD 0x1d /* console storage receive data register */
--- 78,84 -----
#define MBRK 0x3c /* micro-program breakpoint */
#endif
! #if defined(VAX750) || defined(VAX730) || defined(VAX630)
#define MCSR 0x17 /* machine check status register */
#define CSRS 0x1c /* console storage receive status register */
#define CSRD 0x1d /* console storage receive data register */
//E*O*F vax.mtpr.h.diff//
exit 0
More information about the Comp.bugs.4bsd.ucb-fixes
mailing list