📄 memcpy.s
字号:
add %o1, 4, %o1 add %o0, 4, %o02: andcc %g1, 0xffffff80, %g7 be 3f andcc %o0, 4, %g0 be 82f + 45: MOVE_BIGCHUNK(o1, o0, 0x00, o2, o3, o4, o5, g2, g3, g4, g5) MOVE_BIGCHUNK(o1, o0, 0x20, o2, o3, o4, o5, g2, g3, g4, g5) MOVE_BIGCHUNK(o1, o0, 0x40, o2, o3, o4, o5, g2, g3, g4, g5) MOVE_BIGCHUNK(o1, o0, 0x60, o2, o3, o4, o5, g2, g3, g4, g5) subcc %g7, 128, %g7 add %o1, 128, %o1 bne 5b add %o0, 128, %o03: andcc %g1, 0x70, %g7 be 80f andcc %g1, 8, %g0 sethi %hi(80f), %o5 srl %g7, 1, %o4 add %g7, %o4, %o4 add %o1, %g7, %o1 sub %o5, %o4, %o5 jmpl %o5 + %lo(80f), %g0 add %o0, %g7, %o079: /* memcpy_table */ 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: /* memcpy_table_end */ 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: /* memcpy_last7 */ 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 RETL_INSN82: /* 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 %g7, 128, %g7 add %o1, 128, %o1 bne 82b add %o0, 128, %o0#ifndef FASTER_ALIGNED andcc %g1, 0x70, %g7 be 80b andcc %g1, 8, %g0 sethi %hi(80b), %o5 srl %g7, 1, %o4 add %g7, %o4, %o4 add %o1, %g7, %o1 sub %o5, %o4, %o5 jmpl %o5 + %lo(80b), %g0 add %o0, %g7, %o0#else /* FASTER_ALIGNED */ andcc %g1, 0x70, %g7 be 84f andcc %g1, 8, %g0 sethi %hi(84f), %o5 add %o1, %g7, %o1 sub %o5, %g7, %o5 jmpl %o5 + %lo(84f), %g0 add %o0, %g7, %o083: /* amemcpy_table */ 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: /* amemcpy_table_end */ be 85f andcc %g1, 4, %g0 ldd [%o1], %g2 add %o0, 8, %o0 std %g2, [%o0 - 0x08] add %o1, 8, %o185: /* amemcpy_last7 */ 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 RETL_INSN#endif /* FASTER_ALIGNED */86: /* non_aligned */ cmp %o2, 6 bleu 88f#ifdef FASTER_NONALIGNED cmp %o2, 256 bcc 87f#endif /* FASTER_NONALIGNED */ 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, %g7 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, %g7, %g5 or %g2, %g5, %g2 st %g2, [%o0]7: ld [%o1 + 4], %o4 sll %g1, %g4, %g2 srl %o3, %g7, %g5 or %g2, %g5, %g2 st %g2, [%o0 + 4]8: ld [%o1 + 8], %o5 sll %o3, %g4, %g2 srl %o4, %g7, %g5 or %g2, %g5, %g2 st %g2, [%o0 + 8]9: ld [%o1 + 12], %g1 sll %o4, %g4, %g2 srl %o5, %g7, %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, %g7, %g5 srl %g7, 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 RETL_INSN#ifdef FASTER_NONALIGNED87: /* faster_nonaligned */ 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, g7, g1, 8, 24, -3) SMOVE_CHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g7, g1, 8, 24, -3) SMOVE_CHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g7, g1, 8, 24, -3) SMOVE_CHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g7, 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, g7, 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, g7, g1, 16, 16, -2) SMOVE_CHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g7, g1, 16, 16, -2) SMOVE_CHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g7, g1, 16, 16, -2) SMOVE_CHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g7, 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, g7, 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, g7, g1, 24, 8, -1) SMOVE_CHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g7, g1, 24, 8, -1) SMOVE_CHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g7, g1, 24, 8, -1) SMOVE_CHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g7, 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, g7, 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, g7, g1, 8, 24, -3) SMOVE_ALIGNCHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g7, g1, 8, 24, -3) SMOVE_ALIGNCHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g7, g1, 8, 24, -3) SMOVE_ALIGNCHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g7, 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, g7, 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, g7, g1, 24, 8, 3) SMOVE_ALIGNCHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g7, g1, 24, 8, 3) SMOVE_ALIGNCHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g7, g1, 24, 8, 3) SMOVE_ALIGNCHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g7, 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, g7, 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, g7, g1, 16, 16, -2) SMOVE_ALIGNCHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g7, g1, 16, 16, -2) SMOVE_ALIGNCHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g7, g1, 16, 16, -2) SMOVE_ALIGNCHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g7, 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, g7, 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 */ #endif /* FASTER_NONALIGNED */88: /* short_end */ and %o2, 0xe, %o320: sethi %hi(89f), %o5 sll %o3, 3, %o4 add %o0, %o3, %o0 sub %o5, %o4, %o5 add %o1, %o3, %o1 jmpl %o5 + %lo(89f), %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: /* short_table_end */ be 1f nop ldub [%o1], %g2 stb %g2, [%o0]1: retl RETL_INSN90: /* short_aligned_end */ 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, %g1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -