📄 memcpy.s
字号:
add %o0, 128, %o03: andcc %g1, 0x70, %g6 be 80f andcc %g1, 8, %g0 srl %g6, 1, %o4 mov %o7, %g2 add %g6, %o4, %o4 add %o1, %g6, %o1104: call 100f add %o0, %g6, %o0 jmpl %o5 + (80f - 104b), %g0 mov %g2, %o779: MOVE_LASTCHUNK(o1, o0, 0x60, g2, g3, g4, g5) MOVE_LASTCHUNK(o1, o0, 0x50, g2, g3, g4, g5) MOVE_LASTCHUNK(o1, o0, 0x40, g2, g3, g4, g5) MOVE_LASTCHUNK(o1, o0, 0x30, g2, g3, g4, g5) MOVE_LASTCHUNK(o1, o0, 0x20, g2, g3, g4, g5) MOVE_LASTCHUNK(o1, o0, 0x10, g2, g3, g4, g5) MOVE_LASTCHUNK(o1, o0, 0x00, g2, g3, g4, g5)80: be 81f andcc %g1, 4, %g0 ldd [%o1], %g2 add %o0, 8, %o0 st %g2, [%o0 - 0x08] add %o1, 8, %o1 st %g3, [%o0 - 0x04]81: be 1f andcc %g1, 2, %g0 ld [%o1], %g2 add %o1, 4, %o1 st %g2, [%o0] add %o0, 4, %o01: be 1f andcc %g1, 1, %g0 lduh [%o1], %g2 add %o1, 2, %o1 sth %g2, [%o0] add %o0, 2, %o01: be 1f nop ldub [%o1], %g2 stb %g2, [%o0]1: retl ld [%sp + 64], %o082: /* ldd_std */ MOVE_BIGALIGNCHUNK(o1, o0, 0x00, o2, o3, o4, o5, g2, g3, g4, g5) MOVE_BIGALIGNCHUNK(o1, o0, 0x20, o2, o3, o4, o5, g2, g3, g4, g5) MOVE_BIGALIGNCHUNK(o1, o0, 0x40, o2, o3, o4, o5, g2, g3, g4, g5) MOVE_BIGALIGNCHUNK(o1, o0, 0x60, o2, o3, o4, o5, g2, g3, g4, g5) subcc %g6, 128, %g6 add %o1, 128, %o1 bne 82b add %o0, 128, %o0 andcc %g1, 0x70, %g6 be 84f andcc %g1, 8, %g0 mov %o7, %g2111: call 110f add %o1, %g6, %o1 mov %g2, %o7 jmpl %o5 + (84f - 111b), %g0 add %o0, %g6, %o083: MOVE_LASTALIGNCHUNK(o1, o0, 0x60, g2, g3, g4, g5) MOVE_LASTALIGNCHUNK(o1, o0, 0x50, g2, g3, g4, g5) MOVE_LASTALIGNCHUNK(o1, o0, 0x40, g2, g3, g4, g5) MOVE_LASTALIGNCHUNK(o1, o0, 0x30, g2, g3, g4, g5) MOVE_LASTALIGNCHUNK(o1, o0, 0x20, g2, g3, g4, g5) MOVE_LASTALIGNCHUNK(o1, o0, 0x10, g2, g3, g4, g5) MOVE_LASTALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5)84: be 85f andcc %g1, 4, %g0 ldd [%o1], %g2 add %o0, 8, %o0 std %g2, [%o0 - 0x08] add %o1, 8, %o185: be 1f andcc %g1, 2, %g0 ld [%o1], %g2 add %o1, 4, %o1 st %g2, [%o0] add %o0, 4, %o01: be 1f andcc %g1, 1, %g0 lduh [%o1], %g2 add %o1, 2, %o1 sth %g2, [%o0] add %o0, 2, %o01: be 1f nop ldub [%o1], %g2 stb %g2, [%o0]1: retl ld [%sp + 64], %o086: cmp %o2, 6 bleu 88f cmp %o2, 256 bcc 87f andcc %o0, 3, %g0 be 61f andcc %o0, 1, %g0 be 60f andcc %o0, 2, %g0 ldub [%o1], %g5 add %o1, 1, %o1 stb %g5, [%o0] sub %o2, 1, %o2 bne 61f add %o0, 1, %o060: ldub [%o1], %g3 add %o1, 2, %o1 stb %g3, [%o0] sub %o2, 2, %o2 ldub [%o1 - 1], %g3 add %o0, 2, %o0 stb %g3, [%o0 - 1]61: and %o1, 3, %g2 and %o2, 0xc, %g3 and %o1, -4, %o1 cmp %g3, 4 sll %g2, 3, %g4 mov 32, %g2 be 4f sub %g2, %g4, %g6 blu 3f cmp %g3, 0x8 be 2f srl %o2, 2, %g3 ld [%o1], %o3 add %o0, -8, %o0 ld [%o1 + 4], %o4 b 8f add %g3, 1, %g32: ld [%o1], %o4 add %o0, -12, %o0 ld [%o1 + 4], %o5 add %g3, 2, %g3 b 9f add %o1, -4, %o13: ld [%o1], %g1 add %o0, -4, %o0 ld [%o1 + 4], %o3 srl %o2, 2, %g3 b 7f add %o1, 4, %o14: ld [%o1], %o5 cmp %o2, 7 ld [%o1 + 4], %g1 srl %o2, 2, %g3 bleu 10f add %o1, 8, %o1 ld [%o1], %o3 add %g3, -1, %g35: sll %o5, %g4, %g2 srl %g1, %g6, %g5 or %g2, %g5, %g2 st %g2, [%o0]7: ld [%o1 + 4], %o4 sll %g1, %g4, %g2 srl %o3, %g6, %g5 or %g2, %g5, %g2 st %g2, [%o0 + 4]8: ld [%o1 + 8], %o5 sll %o3, %g4, %g2 srl %o4, %g6, %g5 or %g2, %g5, %g2 st %g2, [%o0 + 8]9: ld [%o1 + 12], %g1 sll %o4, %g4, %g2 srl %o5, %g6, %g5 addcc %g3, -4, %g3 or %g2, %g5, %g2 add %o1, 16, %o1 st %g2, [%o0 + 12] add %o0, 16, %o0 bne,a 5b ld [%o1], %o310: sll %o5, %g4, %g2 srl %g1, %g6, %g5 srl %g6, 3, %g3 or %g2, %g5, %g2 sub %o1, %g3, %o1 andcc %o2, 2, %g0 st %g2, [%o0] be 1f andcc %o2, 1, %g0 ldub [%o1], %g2 add %o1, 2, %o1 stb %g2, [%o0 + 4] add %o0, 2, %o0 ldub [%o1 - 1], %g2 stb %g2, [%o0 + 3]1: be 1f nop ldub [%o1], %g2 stb %g2, [%o0 + 4]1: retl ld [%sp + 64], %o087: andcc %o1, 3, %g0 be 3f andcc %o1, 1, %g0 be 4f andcc %o1, 2, %g0 ldub [%o1], %g2 add %o1, 1, %o1 stb %g2, [%o0] sub %o2, 1, %o2 bne 3f add %o0, 1, %o04: lduh [%o1], %g2 add %o1, 2, %o1 srl %g2, 8, %g3 sub %o2, 2, %o2 stb %g3, [%o0] add %o0, 2, %o0 stb %g2, [%o0 - 1]3: andcc %o1, 4, %g0 bne 2f cmp %o5, 1 ld [%o1], %o4 srl %o4, 24, %g2 stb %g2, [%o0] srl %o4, 16, %g3 stb %g3, [%o0 + 1] srl %o4, 8, %g2 stb %g2, [%o0 + 2] sub %o2, 4, %o2 stb %o4, [%o0 + 3] add %o1, 4, %o1 add %o0, 4, %o02: be 33f cmp %o5, 2 be 32f sub %o2, 4, %o231: ld [%o1], %g2 add %o1, 4, %o1 srl %g2, 24, %g3 and %o0, 7, %g5 stb %g3, [%o0] cmp %g5, 7 sll %g2, 8, %g1 add %o0, 4, %o0 be 41f and %o2, 0xffffffc0, %o3 ld [%o0 - 7], %o44: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) SMOVE_CHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) SMOVE_CHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) SMOVE_CHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) subcc %o3, 64, %o3 add %o1, 64, %o1 bne 4b add %o0, 64, %o0 andcc %o2, 0x30, %o3 be,a 1f srl %g1, 16, %g24: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) subcc %o3, 16, %o3 add %o1, 16, %o1 bne 4b add %o0, 16, %o0 srl %g1, 16, %g21: st %o4, [%o0 - 7] sth %g2, [%o0 - 3] srl %g1, 8, %g4 b 88f stb %g4, [%o0 - 1]32: ld [%o1], %g2 add %o1, 4, %o1 srl %g2, 16, %g3 and %o0, 7, %g5 sth %g3, [%o0] cmp %g5, 6 sll %g2, 16, %g1 add %o0, 4, %o0 be 42f and %o2, 0xffffffc0, %o3 ld [%o0 - 6], %o44: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) SMOVE_CHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) SMOVE_CHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) SMOVE_CHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) subcc %o3, 64, %o3 add %o1, 64, %o1 bne 4b add %o0, 64, %o0 andcc %o2, 0x30, %o3 be,a 1f srl %g1, 16, %g24: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) subcc %o3, 16, %o3 add %o1, 16, %o1 bne 4b add %o0, 16, %o0 srl %g1, 16, %g21: st %o4, [%o0 - 6] b 88f sth %g2, [%o0 - 2]33: ld [%o1], %g2 sub %o2, 4, %o2 srl %g2, 24, %g3 and %o0, 7, %g5 stb %g3, [%o0] cmp %g5, 5 srl %g2, 8, %g4 sll %g2, 24, %g1 sth %g4, [%o0 + 1] add %o1, 4, %o1 be 43f and %o2, 0xffffffc0, %o3 ld [%o0 - 1], %o4 add %o0, 4, %o04: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, -1) SMOVE_CHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, -1) SMOVE_CHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, -1) SMOVE_CHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, -1) subcc %o3, 64, %o3 add %o1, 64, %o1 bne 4b add %o0, 64, %o0 andcc %o2, 0x30, %o3 be,a 1f srl %g1, 24, %g24: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, -1) subcc %o3, 16, %o3 add %o1, 16, %o1 bne 4b add %o0, 16, %o0 srl %g1, 24, %g21: st %o4, [%o0 - 5] b 88f stb %g2, [%o0 - 1]41: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) SMOVE_ALIGNCHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) SMOVE_ALIGNCHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) SMOVE_ALIGNCHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) subcc %o3, 64, %o3 add %o1, 64, %o1 bne 41b add %o0, 64, %o0 andcc %o2, 0x30, %o3 be,a 1f srl %g1, 16, %g24: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) subcc %o3, 16, %o3 add %o1, 16, %o1 bne 4b add %o0, 16, %o0 srl %g1, 16, %g21: sth %g2, [%o0 - 3] srl %g1, 8, %g4 b 88f stb %g4, [%o0 - 1]43: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, 3) SMOVE_ALIGNCHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, 3) SMOVE_ALIGNCHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, 3) SMOVE_ALIGNCHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, 3) subcc %o3, 64, %o3 add %o1, 64, %o1 bne 43b add %o0, 64, %o0 andcc %o2, 0x30, %o3 be,a 1f srl %g1, 24, %g24: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, 3) subcc %o3, 16, %o3 add %o1, 16, %o1 bne 4b add %o0, 16, %o0 srl %g1, 24, %g21: stb %g2, [%o0 + 3] b 88f add %o0, 4, %o042: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) SMOVE_ALIGNCHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) SMOVE_ALIGNCHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) SMOVE_ALIGNCHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) subcc %o3, 64, %o3 add %o1, 64, %o1 bne 42b add %o0, 64, %o0 andcc %o2, 0x30, %o3 be,a 1f srl %g1, 16, %g24: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) subcc %o3, 16, %o3 add %o1, 16, %o1 bne 4b add %o0, 16, %o0 srl %g1, 16, %g21: sth %g2, [%o0 - 2] /* Fall through */ 88: and %o2, 0xe, %o3 mov %o7, %g2 sll %o3, 3, %o4 add %o0, %o3, %o0106: call 100f add %o1, %o3, %o1 mov %g2, %o7 jmpl %o5 + (89f - 106b), %g0 andcc %o2, 1, %g0 MOVE_SHORTCHUNK(o1, o0, 0x0c, g2, g3) MOVE_SHORTCHUNK(o1, o0, 0x0a, g2, g3) MOVE_SHORTCHUNK(o1, o0, 0x08, g2, g3) MOVE_SHORTCHUNK(o1, o0, 0x06, g2, g3) MOVE_SHORTCHUNK(o1, o0, 0x04, g2, g3) MOVE_SHORTCHUNK(o1, o0, 0x02, g2, g3) MOVE_SHORTCHUNK(o1, o0, 0x00, g2, g3)89: be 1f nop ldub [%o1], %g2 stb %g2, [%o0]1: retl ld [%sp + 64], %o090: bne 88b andcc %o2, 8, %g0 be 1f andcc %o2, 4, %g0 ld [%o1 + 0x00], %g2 ld [%o1 + 0x04], %g3 add %o1, 8, %o1 st %g2, [%o0 + 0x00] st %g3, [%o0 + 0x04] add %o0, 8, %o01: b 81b mov %o2, %g1100: retl sub %o7, %o4, %o5110: retl sub %o7, %g6, %o5END(memcpy)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -