home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 4 / DATAFILE_PDCD4.iso / unix / riscbsd / datafile / _btriscbsd / booter / s / mem < prev    next >
Encoding:
Text File  |  1996-02-17  |  8.3 KB  |  317 lines

  1.     GET    h.asmregs
  2.  
  3.         AREA    |C$$code|,CODE,READONLY
  4.  
  5.     EXPORT    |memset|
  6.  
  7. |memset|
  8.         MOV     ip,a1
  9.         AND     a2,a2,#&ff
  10.         CMP     a3,#4
  11.         BLT     |__memset_l4|
  12.         ANDS    a4,ip,#3
  13.         BEQ     |_memset|
  14.         RSB     a4,a4,#4
  15.         SUB     a3,a3,a4
  16.         CMP     a4,#2
  17.         STRB    a2,[ip],#1
  18.         STRGEB  a2,[ip],#1
  19.         STRGTB  a2,[ip],#1
  20. |_memset|
  21.         ORR     a2,a2,a2,LSL #8
  22.         ORR     a2,a2,a2,LSL #16
  23.         ANDS    a4,a3,#12
  24.         BEQ     |__memset_l2|
  25.         CMP     a4,#8
  26.         STR     a2,[ip],#4
  27.         STRGE   a2,[ip],#4
  28.         STRGT   a2,[ip],#4
  29. |__memset_l2|
  30.         BICS    a3,a3,#12
  31.         MOVEQ   pc,lr
  32.         BICS    a4,a3,#15
  33.         BEQ     |__memset_l5|
  34.         STMFD   sp!,{v1,v2,lr}
  35.         MOV     v1,a2
  36.         MOV     v2,a2
  37.         MOV     lr,a2
  38.         SUB     a3,a3,a4
  39. |__memset_l3|
  40.         STMIA   ip!,{a2,v1,v2,lr}
  41.         SUBS    a4,a4,#32
  42.         STMGEIA ip!,{a2,v1,v2,lr}
  43.         BGT     |__memset_l3|
  44.         LDMFD   sp!,{v1,v2,lr}
  45. |__memset_l4|
  46.         CMP     a3,#0
  47.         MOVEQ   pc,lr
  48. |__memset_l5|
  49.         CMP     a3,#2
  50.         STRB    a2,[ip],#1
  51.         STRGEB  a2,[ip],#1
  52.         STRGTB  a2,[ip],#1
  53.         MOV     pc,lr
  54.  
  55.  
  56.         EXPORT  |_memcpy|
  57.  
  58. |_memcpy|
  59.         CMP     a1,a2
  60.         CMPNE   a3,#0
  61.         MOVEQ   pc,lr
  62.         MOV     ip,a1
  63.         CMP     ip,a2
  64.         BLE     |__memcpy_wd|
  65.         ADDGT   ip,ip,a3
  66.         ADDGT   a2,a2,a3
  67.         B       |__memcpy_wu|
  68.  
  69.     EXPORT    |memcpy|
  70. |memcpy|
  71.         CMP     a1,a2
  72.         CMPNE   a3,#0
  73.         MOVEQ   pc,lr
  74.         MOV     ip,a1
  75.         CMP     ip,a2
  76.         ADDGT   ip,ip,a3
  77.         ADDGT   a2,a2,a3
  78.         ANDS    a4,ip,#3
  79.         ANDEQS  a4,a2,#3
  80.         BEQ     |__memcpy_w|
  81.         CMP     a3,#4
  82.         BLT     |__memcpy_b|
  83.  
  84. |__memcpy_c|                            ; complex copy
  85.         CMP     ip,a2
  86.         BLE     |__memcpy_cd|
  87.  
  88. |__memcpy_cu|                           ; complex copyup - word align ip
  89.         ANDS    a4,ip,#3
  90.         BEQ     |__memcpy_cu_l0|
  91.         SUB     a3,a3,a4
  92.         CMP     a4,#2
  93.         LDRB    a4,[a2,#-1]!
  94.         STRB    a4,[ip,#-1]!
  95.         LDRGEB  a4,[a2,#-1]!
  96.         STRGEB  a4,[ip,#-1]!
  97.         LDRGTB  a4,[a2,#-1]!
  98.         STRGTB  a4,[ip,#-1]!
  99. |__memcpy_cu_l0|
  100.         ANDS    a4,a2,#3
  101.         BEQ     |__memcpy_wu|
  102.         STMFD   sp!,{a1,v1,v2,lr}
  103.         BIC     a2,a2,#3                ; word align a2 [1]
  104.         MOV     a4,a4,LSL #3            ; a4 = shift1
  105.         RSB     v1,a4,#32               ; v1 = shift2
  106.         LDR     a1,[a2,#0]
  107.         ANDS    lr,a3,#12
  108.         BEQ     |__memcpy_cu_l1|
  109.         LDR     v2,[a2,#-4]!
  110.         MOV     a1,a1,LSL v1
  111.         ORR     a1,a1,v2,LSR a4
  112.         STR     a1,[ip,#-4]!
  113.         MOV     a1,v2
  114.         SUBS    lr,lr,#4
  115.         BEQ     |__memcpy_cu_l1|
  116.         LDR     v2,[a2,#-4]!
  117.         MOV     a1,a1,LSL v1
  118.         ORR     a1,a1,v2,LSR a4
  119.         STR     a1,[ip,#-4]!
  120.         MOV     a1,v2
  121.         SUBS    lr,lr,#4
  122.         BEQ     |__memcpy_cu_l1|
  123.         LDR     v2,[a2,#-4]!
  124.         MOV     a1,a1,LSL v1
  125.         ORR     a1,a1,v2,LSR a4
  126.         STR     a1,[ip,#-4]!
  127.         MOV     a1,v2
  128. |__memcpy_cu_l1|
  129.         BICS    a3,a3,#12
  130.         LDMEQFD sp!,{a1,v1,v2,pc}
  131.         BICS    lr,a3,#15
  132.         BEQ     |__memcpy_cu_l4|
  133.         STMFD   sp!,{v3,v4,v5}
  134.         MOV     v5,a1
  135.         SUB     a3,a3,lr
  136. |__memcpy_cu_l2|
  137.         LDMDB   a2!,{a1,v2,v3,v4}
  138.         MOV     v5,v5,LSL v1
  139.         ORR     v5,v5,v4,LSR a4
  140.         MOV     v4,v4,LSL v1
  141.         ORR     v4,v4,v3,LSR a4
  142.         MOV     v3,v3,LSL v1
  143.         ORR     v3,v3,v2,LSR a4
  144.         MOV     v2,v2,LSL v1
  145.         ORR     v2,v2,a1,LSR a4
  146.         STMDB   ip!,{v2,v3,v4,v5}
  147.         MOV     v5,a1
  148.         SUBS    lr,lr,#16
  149.         BGT     |__memcpy_cu_l2|
  150. |__memcpy_cu_l3|
  151.         LDMFD   sp!,{v3,v4,v5}
  152. |__memcpy_cu_l4|
  153.         ADD     a2,a2,a4,LSR #3         ; reset a2 from [1]
  154.         LDMFD   sp!,{a1,v1,v2,lr}
  155.         CMP     a3,#0
  156.         MOVEQ   pc,lr
  157.         B       |__memcpy_bu|
  158.  
  159. |__memcpy_cd|                           ; complex copydown - word align ip
  160.         ANDS    a4,ip,#3
  161.         BEQ     |__memcpy_cd_l0|
  162.         RSB     a4,a4,#4
  163.         SUB     a3,a3,a4
  164.         CMP     a4,#2
  165.         LDRB    a4,[a2],#1
  166.         STRB    a4,[ip],#1
  167.         LDRGEB  a4,[a2],#1
  168.         STRGEB  a4,[ip],#1
  169.         LDRGTB  a4,[a2],#1
  170.         STRGTB  a4,[ip],#1
  171. |__memcpy_cd_l0|
  172.         ANDS    a4,a2,#3
  173.         BEQ     |__memcpy_wd|
  174.         STMFD   sp!,{a1,v1,v2,lr}
  175.         BIC     a2,a2,#3                ; word align a2 [1]
  176.         MOV     a4,a4,LSL #3            ; a4 = shift1
  177.         RSB     v1,a4,#32               ; v1 = shift2
  178.         LDR     a1,[a2],#4
  179.         ANDS    lr,a3,#12
  180.         BEQ     |__memcpy_cd_l1|
  181.         LDR     v2,[a2],#4
  182.         MOV     a1,a1,LSR a4
  183.         ORR     a1,a1,v2,LSL v1
  184.         STR     a1,[ip],#4
  185.         MOV     a1,v2
  186.         SUBS    lr,lr,#4
  187.         BEQ     |__memcpy_cd_l1|
  188.         LDR     v2,[a2],#4
  189.         MOV     a1,a1,LSR a4
  190.         ORR     a1,a1,v2,LSL v1
  191.         STR     a1,[ip],#4
  192.         MOV     a1,v2
  193.         SUBS    lr,lr,#4
  194.         BEQ     |__memcpy_cd_l1|
  195.         LDR     v2,[a2],#4
  196.         MOV     a1,a1,LSR a4
  197.         ORR     a1,a1,v2,LSL v1
  198.         STR     a1,[ip],#4
  199.         MOV     a1,v2
  200. |__memcpy_cd_l1|
  201.         BICS    a3,a3,#12
  202.         LDMEQFD sp!,{a1,v1,v2,pc}
  203.         BICS    lr,a3,#15
  204.         BEQ     |__memcpy_cd_l4|
  205.         STMFD   sp!,{v3,v4,v5}
  206.         SUB     a3,a3,lr
  207. |__memcpy_cd_l2|
  208.         LDMIA   a2!,{v2,v3,v4,v5}
  209.         MOV     a1,a1,LSR a4
  210.         ORR     a1,a1,v2,LSL v1
  211.         MOV     v2,v2,LSR a4
  212.         ORR     v2,v2,v3,LSL v1
  213.         MOV     v3,v3,LSR a4
  214.         ORR     v3,v3,v4,LSL v1
  215.         MOV     v4,v4,LSR a4
  216.         ORR     v4,v4,v5,LSL v1
  217.         STMIA   ip!,{a1,v2,v3,v4}
  218.         MOV     a1,v5
  219.         SUBS    lr,lr,#16
  220.         BGT     |__memcpy_cd_l2|
  221. |__memcpy_cd_l3|
  222.         LDMFD   sp!,{v3,v4,v5}
  223. |__memcpy_cd_l4|
  224.         SUB     a2,a2,v1,LSR #3         ; reset a2 from [1]
  225.         LDMFD   sp!,{a1,v1,v2,lr}
  226.         CMP     a3,#0
  227.         MOVEQ  pc,lr
  228.         B       |__memcpy_bd|
  229.  
  230. |__memcpy_b|                            ; byte copy 1 <= length <= 3
  231.         CMP     ip,a2
  232.         BLE     |__memcpy_bd|
  233.  
  234. |__memcpy_bu|                           ; byte copyup
  235.         CMP     a3,#2
  236.         LDRB    a4,[a2,#-1]!
  237.         STRB    a4,[ip,#-1]!
  238.         LDRGEB  a4,[a2,#-1]!
  239.         STRGEB  a4,[ip,#-1]!
  240.         LDRGTB  a4,[a2,#-1]!
  241.         STRGTB  a4,[ip,#-1]!
  242.         MOV    pc,lr
  243.  
  244. |__memcpy_bd|                           ; byte copydown
  245.         CMP     a3,#2
  246.         LDRB    a4,[a2],#1
  247.         STRB    a4,[ip],#1
  248.         LDRGEB  a4,[a2],#1
  249.         STRGEB  a4,[ip],#1
  250.         LDRGTB  a4,[a2],#1
  251.         STRGTB  a4,[ip],#1
  252.         MOV    pc,lr
  253.  
  254. |__memcpy_w|                            ; word aligned copy
  255.         CMP     ip,a2
  256.         BLE     |__memcpy_wd|
  257.  
  258. |__memcpy_wu|                           ; word aligned copyup
  259.         ANDS    a4,a3,#12
  260.         BEQ     |__memcpy_wu_l0|
  261.         CMP     a4,#8
  262.         LDR     a4,[a2,#-4]!
  263.         STR     a4,[ip,#-4]!
  264.         LDRGE   a4,[a2,#-4]!
  265.         STRGE   a4,[ip,#-4]!
  266.         LDRGT   a4,[a2,#-4]!
  267.         STRGT   a4,[ip,#-4]!
  268. |__memcpy_wu_l0|
  269.         BICS    a3,a3,#12
  270.         MOVEQ  pc,lr
  271.         BICS    a4,a3,#15
  272.         BEQ     |__memcpy_bu|
  273.         STMFD   sp!,{a1,v1,v2,lr}
  274.         SUB     a3,a3,a4
  275. |__memcpy_wu_l1|
  276.         LDMDB   a2!,{a1,v1,v2,lr}
  277.         STMDB   ip!,{a1,v1,v2,lr}
  278.         SUBS    a4,a4,#32
  279.         LDMGEDB a2!,{a1,v1,v2,lr}
  280.         STMGEDB ip!,{a1,v1,v2,lr}
  281.         BGT     |__memcpy_wu_l1|
  282.         CMP     a3,#0
  283.         LDMFD   sp!,{a1,v1,v2,lr}
  284.         MOVEQ   pc,lr
  285.         B       |__memcpy_bu|
  286.  
  287. |__memcpy_wd|                           ; word aligned copydown
  288.         ANDS    a4,a3,#12
  289.         BEQ     |__memcpy_wd_l0|
  290.         CMP     a4,#8
  291.         LDR     a4,[a2],#4
  292.         STR     a4,[ip],#4
  293.         LDRGE   a4,[a2],#4
  294.         STRGE   a4,[ip],#4
  295.         LDRGT   a4,[a2],#4
  296.         STRGT   a4,[ip],#4
  297. |__memcpy_wd_l0|
  298.         BICS    a3,a3,#12
  299.         MOVEQ   pc,lr
  300.         BICS    a4,a3,#15
  301.         BEQ     |__memcpy_bd|
  302.         STMFD   sp!,{a1,v1,v2,lr}
  303.         SUB     a3,a3,a4
  304. |__memcpy_wd_l1|
  305.         LDMIA   a2!,{a1,v1,v2,lr}
  306.         STMIA   ip!,{a1,v1,v2,lr}
  307.         SUBS    a4,a4,#32
  308.         LDMGEIA a2!,{a1,v1,v2,lr}
  309.         STMGEIA ip!,{a1,v1,v2,lr}
  310.         BGT     |__memcpy_wd_l1|
  311.         CMP     a3,#0
  312.         LDMFD   sp!,{a1,v1,v2,lr}
  313.         MOVEQ   pc,lr
  314.         B       |__memcpy_bd|
  315.  
  316.         END
  317.