361 lines
4.6 KiB
Plaintext
361 lines
4.6 KiB
Plaintext
!
|
|
! @(#)pc2.il 1.1 94/10/31 SMI
|
|
!
|
|
|
|
! Inline code templates for Pascal library routines.
|
|
!
|
|
.inline _ACTFILE,4
|
|
ld [%o0+12],%o0 ! _ACTFILE
|
|
.end
|
|
|
|
.inline _ADDT,16
|
|
mov %g0,%o7 ! _ADDT(result0, left, right, siz)
|
|
1:
|
|
ld [%o1+%o7],%o4
|
|
ld [%o2+%o7],%o5
|
|
or %o4,%o5,%o5
|
|
st %o5,[%o0+%o7]
|
|
subcc %o3,1,%o3
|
|
bne 1b
|
|
add %o7,4,%o7
|
|
.end
|
|
|
|
.inline _SUBT,16
|
|
mov %g0,%o7 ! _SUBT(result0, left, right, siz)
|
|
1:
|
|
ld [%o1+%o7],%o4
|
|
ld [%o2+%o7],%o5
|
|
andn %o4,%o5,%o5
|
|
st %o5,[%o0+%o7]
|
|
subcc %o3,1,%o3
|
|
bne 1b
|
|
add %o7,4,%o7
|
|
.end
|
|
|
|
.inline _MULT,16
|
|
mov %g0,%o7 ! _MULT(result0, left, right, siz)
|
|
1:
|
|
ld [%o1+%o7],%o4
|
|
ld [%o2+%o7],%o5
|
|
and %o4,%o5,%o5
|
|
st %o5,[%o0+%o7]
|
|
subcc %o3,1,%o3
|
|
bne 1b
|
|
add %o7,4,%o7
|
|
.end
|
|
|
|
.inline _IN,16
|
|
sub %o0,%o1,%o1 ! _IN (element, lower, nwords, setptr)
|
|
mov %g0,%o0 ! assume answer is zero, preload
|
|
cmp %o1,%o2
|
|
bgu 1f
|
|
and %o1,7,%o2 ! shift count
|
|
srl %o1,3,%o1 ! byte offset in set
|
|
ldub [%o3+%o1],%o0 ! fetch byte from set
|
|
srl %o0,%o2,%o0 ! shift byte right 0..7 places
|
|
and %o0,1,%o0 ! mask result to 1 bit
|
|
1:
|
|
.end
|
|
|
|
.inline _NIL,4
|
|
sethi %hi(__minptr),%o1 ! _NIL (ptr)
|
|
ld [%o1+%lo(__minptr)],%o1
|
|
cmp %o0,%o1
|
|
bcs 1f
|
|
nop
|
|
sethi %hi(__maxptr),%o1
|
|
ld [%o1+%lo(__maxptr)],%o1
|
|
cmp %o0,%o1
|
|
bleu 2f
|
|
nop
|
|
1:
|
|
mov %o0,%o1
|
|
sethi %hi(_ENIL),%o0
|
|
add %o0,%lo(_ENIL),%o0
|
|
call _ERROR
|
|
nop
|
|
2:
|
|
.end
|
|
|
|
.inline _INLINE_RELEQ,12
|
|
mov 0,%o3 ! _INLINE_RELEQ
|
|
1:
|
|
ldsb [%o1+%o3],%o4
|
|
ldsb [%o2+%o3],%o5
|
|
cmp %o4,%o5
|
|
bne 2f
|
|
add %o3,1,%o3
|
|
cmp %o3,%o0
|
|
bne 1b
|
|
nop
|
|
mov 1,%o0
|
|
b 3f
|
|
nop
|
|
2:
|
|
mov %g0,%o0
|
|
3:
|
|
.end
|
|
|
|
.inline _INLINE_RELNE,12
|
|
mov 0,%o3 ! _INLINE_RELNE
|
|
1:
|
|
ldsb [%o1+%o3],%o4
|
|
ldsb [%o2+%o3],%o5
|
|
cmp %o4,%o5
|
|
bne 2f
|
|
add %o3,1,%o3
|
|
cmp %o3,%o0
|
|
bne 1b
|
|
nop
|
|
mov %g0,%o0
|
|
b 3f
|
|
nop
|
|
2:
|
|
mov 1,%o0
|
|
3:
|
|
.end
|
|
|
|
.inline _INLINE_RELSLT,12
|
|
mov 0,%o3 ! _INLINE_RELSLT
|
|
1:
|
|
ldsb [%o1+%o3],%o4
|
|
ldsb [%o2+%o3],%o5
|
|
cmp %o4,%o5
|
|
bne 2f
|
|
add %o3,1,%o3
|
|
cmp %o3,%o0
|
|
bne 1b
|
|
nop
|
|
2:
|
|
bl 3f
|
|
nop
|
|
mov %g0,%o0
|
|
b 4f
|
|
nop
|
|
3:
|
|
mov 1,%o0
|
|
4:
|
|
.end
|
|
|
|
.inline _INLINE_RELSLE,12
|
|
mov 0,%o3 ! _INLINE_RESLE
|
|
1:
|
|
ldsb [%o1+%o3],%o4
|
|
ldsb [%o2+%o3],%o5
|
|
cmp %o4,%o5
|
|
bne 2f
|
|
add %o3,1,%o3
|
|
cmp %o3,%o0
|
|
bne 1b
|
|
nop
|
|
2:
|
|
ble 3f
|
|
nop
|
|
mov %g0,%o0
|
|
b 4f
|
|
nop
|
|
3:
|
|
mov 1,%o0
|
|
4:
|
|
.end
|
|
|
|
.inline _INLINE_RELSGT,12
|
|
mov 0,%o3 ! _INLINE_RELSGT
|
|
1:
|
|
ldsb [%o1+%o3],%o4
|
|
ldsb [%o2+%o3],%o5
|
|
cmp %o4,%o5
|
|
bne 2f
|
|
add %o3,1,%o3
|
|
cmp %o3,%o0
|
|
bne 1b
|
|
nop
|
|
2:
|
|
bg 3f
|
|
nop
|
|
mov %g0,%o0
|
|
b 4f
|
|
nop
|
|
3:
|
|
mov 1,%o0
|
|
4:
|
|
.end
|
|
|
|
.inline _INLINE_RELSGE,12
|
|
mov 0,%o3 ! _INLINE_RELSGE
|
|
1:
|
|
ldsb [%o1+%o3],%o4
|
|
ldsb [%o2+%o3],%o5
|
|
cmp %o4,%o5
|
|
bne 2f
|
|
add %o3,1,%o3
|
|
cmp %o3,%o0
|
|
bne 1b
|
|
nop
|
|
2:
|
|
bge 3f
|
|
nop
|
|
mov %g0,%o0
|
|
b 4f
|
|
nop
|
|
3:
|
|
mov 1,%o0
|
|
4:
|
|
.end
|
|
|
|
.inline V_to_V,16
|
|
mov %g0,%o5
|
|
cmp %o2,%o3 ! V_to_V(dest, source, maxdest, maxsource )
|
|
bge 1f
|
|
nop
|
|
mov %o2,%o3
|
|
1:
|
|
ld [%o1+%o5],%o2
|
|
cmp %o2,%o3
|
|
bge 2f
|
|
nop
|
|
mov %o2,%o3
|
|
2:
|
|
st %o3,[%o0+%o5]
|
|
subcc %o3,1,%o3
|
|
blt 4f
|
|
nop
|
|
add %o1,4,%o1
|
|
add %o0,4,%o0
|
|
3:
|
|
ldub [%o1+%o3],%o2
|
|
stb %o2,[%o0+%o3]
|
|
subcc %o3,1,%o3
|
|
bge 3b
|
|
nop
|
|
4:
|
|
.end
|
|
|
|
.inline STR_CONCAT,16
|
|
mov %g0,%o5
|
|
ld [%o2+%o5],%o4 ! STR_CONCAT(dest, source, x, size)
|
|
add %o4,%o3,%o4
|
|
st %o4,[%o2+%o5]
|
|
dec %o3
|
|
1:
|
|
ldub [%o1+%o3],%o2
|
|
stb %o2,[%o0+%o3]
|
|
subcc %o3,1,%o3
|
|
bge 1b
|
|
nop
|
|
.end
|
|
|
|
.inline CHAR_CONCAT,12
|
|
stb %o1,[%o0+%g0] ! CHAR_CONCAT(dest, char, countaddr)
|
|
ld [%o2+%g0],%o0
|
|
inc %o0
|
|
st %o0,[%o2+%g0]
|
|
.end
|
|
|
|
.inline V_to_STR,16
|
|
clr %o5
|
|
ld [%o1+%o5],%o3 ! V_to_STR(dest, source, destsize-1)
|
|
dec %o3
|
|
sub %o2,%o3,%o2
|
|
add %o1,4,%o1
|
|
mov %o3,%o5
|
|
1:
|
|
ldub [%o1+%o5],%o4
|
|
stb %o4,[%o0+%o5]
|
|
subcc %o5,1,%o5
|
|
bge 1b
|
|
nop
|
|
addcc %o0,%o3,%o0
|
|
2:
|
|
mov 32,%o1
|
|
3:
|
|
stb %o1,[%o0+%o2]
|
|
subcc %o2,1,%o2
|
|
bg 3b
|
|
nop
|
|
.end
|
|
|
|
.inline V_CONCAT,12
|
|
ld [%o2+%g0],%o3 ! V_CONCAT(destloc, source, destlen_addr)
|
|
ld [%o1+%g0],%o4
|
|
add %o3,%o4,%o3
|
|
st %o3,[%o2+%g0]
|
|
add %o1,4,%o1
|
|
dec %o4
|
|
1:
|
|
ldub [%o1+%o4],%o3
|
|
stb %o3,[%o0+%o4]
|
|
subcc %o4,1,%o4
|
|
bge 1b
|
|
nop
|
|
.end
|
|
|
|
.inline CHAR_to_V,8
|
|
stb %o1,[%o0+4] ! CHAR_to_V(dest, ch)
|
|
mov 1,%o1
|
|
st %o1,[%o0+%g0]
|
|
.end
|
|
|
|
.inline STR_TO_V,16
|
|
st %o3,[%o2+%g0] ! STR_TO_V(dest, source, x, len)
|
|
dec %o3
|
|
1:
|
|
ldub [%o1+%o3],%o4
|
|
stb %o4,[%o0+%o3]
|
|
subcc %o3,1,%o3
|
|
bge 1b
|
|
nop
|
|
.end
|
|
|
|
.inline _RANG4,12
|
|
cmp %o0,%o2 ! _RANG4(val, min, max) --untested.
|
|
bgt 1f
|
|
nop
|
|
cmp %o0,%o1
|
|
bge 2f
|
|
nop
|
|
1:
|
|
mov %o0,%o1
|
|
set _ERANG,%o0
|
|
call _ERROR
|
|
nop
|
|
2:
|
|
.end
|
|
|
|
.inline _SUBSC,12
|
|
cmp %o0,%o2 ! _SUBSC(val, min, max) --see RANG4.
|
|
bgt 1f
|
|
nop
|
|
cmp %o0,%o1
|
|
bge 2f
|
|
nop
|
|
1:
|
|
mov %o0,%o1
|
|
set _ERANG,%o0
|
|
call _ERROR
|
|
nop
|
|
2:
|
|
.end
|
|
|
|
.inline _RSNG4,8
|
|
cmp %o0,%o1 ! _RSNG4(val,max) -- untested.
|
|
ble 1f
|
|
nop
|
|
mov %o0,%o1
|
|
set _ERANG,%o0
|
|
call _ERROR
|
|
nop
|
|
1:
|
|
.end
|
|
|
|
.inline _SUBSCZ,8
|
|
cmp %o0,%o1 ! _SUBSCZ(val,max) -- see RSNG4.
|
|
ble 1f
|
|
nop
|
|
mov %o0,%o1
|
|
set _ERANG,%o0
|
|
call _ERROR
|
|
nop
|
|
1:
|
|
.end
|