home *** CD-ROM | disk | FTP | other *** search
/ EuroCD 3 / EuroCD 3.iso / Programming / vbcc / machines / amigappc / libsrc / string / memset.s < prev    next >
Encoding:
Text File  |  1998-06-24  |  796 b   |  51 lines

  1. ##
  2. ## vbcc-PowerPC libvc.a
  3. ##
  4. ## void *memset(void *s,int c,size_t n)
  5. ## r3           r3      r4    r5
  6. ##
  7. ## v0.2 23.12.97 phx
  8. ##      check n=0
  9. ## v0.1 23.11.97 phx
  10. ##
  11.  
  12. .set    BYTECPY,16            # do byte-copy for n < 16
  13.  
  14.     .text
  15.     .global    memset
  16. memset:
  17.     cmpwi    r5,0
  18.     beqlr
  19.     mr    r6,r3
  20.     cmplwi    r5,BYTECPY
  21.     blt    .byteset
  22.     insrwi    r4,r4,8,16
  23.     insrwi    r4,r4,16,0
  24.     extrwi    r7,r6,2,30
  25.     extrwi.    r8,r4,2,30
  26.     cmpw    cr1,r7,r8        # same alignment?
  27.     bne    cr1,.1
  28.     beq    .1            # 32-bit alignment
  29.     li    r7,4
  30.     sub    r7,r7,r8
  31.     sub    r5,r5,r7
  32.     stw    r4,0(r6)        # store first bytes unaligned
  33.     add    r6,r6,r7
  34. .1:    srwi    r7,r5,2
  35.     mtctr    r7
  36.     subi    r6,r6,4
  37. .2:    stwu    r4,4(r6)
  38.     bdnz    .2
  39.     andi.    r5,r5,3            # remaining bytes?
  40.     beqlr
  41.     addi    r6,r6,4
  42. .byteset:
  43.     mtctr    r5
  44.     subi    r6,r6,1
  45. .3:    stbu    r4,1(r6)
  46.     bdnz    .3
  47.     blr
  48.  
  49.     .type    memset,@function
  50.     .size    memset,$-memset
  51.