Files
Arquivotheca.SunOS-4.1.4/usr.lib/libpc/sparc/pc2.il
seta75D ff309bfe1c Init
2021-10-11 18:37:13 -03:00

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