123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- .global aar
- .global lar
- .global sar
- aar: ! %o0 = descr %o1 = index %o2 = array_ptr
- save %sp, -64, %sp
- ld [%i0], %o0 ! lower bound
- subcc %i1, %o0, %o1 ! 0..N-1
- bl 1f ! <0
- nop
- ld [%i0+4], %o0 ! n
- cmp %o1, %o0
- bgt 1f ! > N
- nop
- call mli4 ! descr *= n.size
- ld [%i0+8], %o0 ! el.size
- add %i2, %o0, %i0 ! &base_addr[n]
- ret
- restore ! delay slot
- 1: restore
- set EARRAY, %o0
- call trp
- nop
- retl
- nop
- lar: ! %o0 = descr %o1 = index %o2 = array_ptr
-
- mov %o7, %o4
- call aar
- mov %o0, %o3
- mov %o4, %o7
-
- ! %o0 = address of el, %o1 = sizeof(el), %o2 = word, %o3 = descr
- ld [%o3+8], %o1 ! el.size
- cmp %o1, 1
- bne 2f
- nop
- ldub [%o0], %o2 ! el.size == 1
- dec 4, %l0
- retl
- st %o2, [%l0] ! delay slot
- 2: cmp %o1,2
- bne 3f
- nop
- lduh [%o0], %o2 ! el.size == 2
- dec 4, %l0
- retl
- st %o2, [%l0] ! delay slot
- 3: cmp %o1, 4
- bne 4f
- nop
- ld [%o0], %o2
- dec 4, %l0
- retl
- st %o2, [%l0] ! delay slot
- 4: sub %l0, %o1, %l0
- 5: deccc 4, %o1
- ld [%o0+%o1], %o2
- bnz 5b
- st %o2, [%l0+%o1]
- retl
- nop
- sar: ! %o0 = descr %o1 = index %o2 = array_ptr
-
- mov %o7, %o4
- call aar
- mov %o0, %o3
- mov %o4, %o7
-
- ! %o0 = address of el, %o1 = sizeof(el), %o2 = word, %o3 = descr
- ld [%o3+8], %o1 ! el.size
- cmp %o1, 1
- bne 2f
- nop
- ld [%l0], %o2
- stb %o2, [%o0]
- retl
- inc 4, %l0 ! delay slot
- 2: cmp %o1,2
- bne 3f
- nop
- ld [%l0], %o2
- sth %o2, [%o0]
- retl
- inc 4, %l0 ! delay slot
- 3: cmp %o1, 4
- bne 4f
- nop
- ld [%l0], %o2
- st %o2, [%o0]
- retl
- inc 4, %l0 ! delay slot
- 4: mov %o1, %o4
- 5: deccc 4, %o1
- ld [%l0+%o1], %o2
- bnz 5b
- st %o2, [%o0+%o1] ! delay slot
- retl
- add %l0, %o4, %l0 ! delay slot
|