home *** CD-ROM | disk | FTP | other *** search
- ##
- ## vbcc-PowerPC libvc.a
- ##
- ## void *memset(void *s,int c,size_t n)
- ## r3 r3 r4 r5
- ##
- ## v0.2 23.12.97 phx
- ## check n=0
- ## v0.1 23.11.97 phx
- ##
-
- .set BYTECPY,16 # do byte-copy for n < 16
-
- .text
- .global memset
- memset:
- cmpwi r5,0
- beqlr
- mr r6,r3
- cmplwi r5,BYTECPY
- blt .byteset
- insrwi r4,r4,8,16
- insrwi r4,r4,16,0
- extrwi r7,r6,2,30
- extrwi. r8,r4,2,30
- cmpw cr1,r7,r8 # same alignment?
- bne cr1,.1
- beq .1 # 32-bit alignment
- li r7,4
- sub r7,r7,r8
- sub r5,r5,r7
- stw r4,0(r6) # store first bytes unaligned
- add r6,r6,r7
- .1: srwi r7,r5,2
- mtctr r7
- subi r6,r6,4
- .2: stwu r4,4(r6)
- bdnz .2
- andi. r5,r5,3 # remaining bytes?
- beqlr
- addi r6,r6,4
- .byteset:
- mtctr r5
- subi r6,r6,1
- .3: stbu r4,1(r6)
- bdnz .3
- blr
-
- .type memset,@function
- .size memset,$-memset
-