📄 viscopy.s
字号:
add %o2, 4) ! Store andcc %o2, -128, %g7 ! IEU1 Group2: be,pn %xcc, 3f ! CTI andcc %o0, 4, %g0 ! IEU1 Group be,pn %xcc, 82f + 4 ! CTI Group#else /* !REGS_64BIT */5: andcc %o2, -128, %g7 ! IEU1 be,a,pn %xcc, 41f ! CTI andcc %o2, 0x70, %g7 ! IEU1 Group#endif /* !REGS_64BIT */5: MOVE_BIGCHUNK(o1, o0, 0x00, g1, g3, g5, o5) MOVE_BIGCHUNK(o1, o0, 0x20, g1, g3, g5, o5) MOVE_BIGCHUNK(o1, o0, 0x40, g1, g3, g5, o5) MOVE_BIGCHUNK(o1, o0, 0x60, g1, g3, g5, o5) EXT(5b,35f,VIScopyfixup1)35: subcc %g7, 128, %g7 ! IEU1 Group add %o1, 128, %o1 ! IEU0 bne,pt %xcc, 5b ! CTI add %o0, 128, %o0 ! IEU0 Group3: andcc %o2, 0x70, %g7 ! IEU1 Group41: be,pn %xcc, 80f ! CTI andcc %o2, 8, %g0 ! IEU1 Group#ifdef __KERNEL__79: sethi %hi(80f), %o5 ! IEU0 sll %g7, 1, %g5 ! IEU0 Group add %o1, %g7, %o1 ! IEU1 srl %g7, 1, %g2 ! IEU0 Group sub %o5, %g5, %o5 ! IEU1 sub %o5, %g2, %o5 ! IEU0 Group jmpl %o5 + %lo(80f), %g0 ! CTI Group brk forced add %o0, %g7, %o0 ! IEU0 Group#else ! Clk1 8-( ! Clk2 8-( ! Clk3 8-( ! Clk4 8-(79: rd %pc, %o5 ! PDU Group sll %g7, 1, %g5 ! IEU0 Group add %o1, %g7, %o1 ! IEU1 sub %o5, %g5, %o5 ! IEU0 Group jmpl %o5 + %lo(80f - 79b), %g0 ! CTI Group brk forced add %o0, %g7, %o0 ! IEU0 Group#endif36: MOVE_LASTCHUNK(o1, o0, 0x60, g2, g3, g5, o5) MOVE_LASTCHUNK(o1, o0, 0x50, g2, g3, g5, o5) MOVE_LASTCHUNK(o1, o0, 0x40, g2, g3, g5, o5) MOVE_LASTCHUNK(o1, o0, 0x30, g2, g3, g5, o5) MOVE_LASTCHUNK(o1, o0, 0x20, g2, g3, g5, o5) MOVE_LASTCHUNK(o1, o0, 0x10, g2, g3, g5, o5) MOVE_LASTCHUNK(o1, o0, 0x00, g2, g3, g5, o5) EXT(36b,80f,VIScopyfixup2)80: be,pt %xcc, 81f ! CTI andcc %o2, 4, %g0 ! IEU1#ifdef REGS_64BIT ASI_SETSRC_NOBLK ! LSU Group EX(LDX [%o1] ASINORMAL, %g2, and %o2, 0xf) ! Load Group add %o0, 8, %o0 ! IEU0 ASI_SETDST_NOBLK ! LSU Group EX(STW %g2, [%o0 - 0x4] ASINORMAL, and %o2, 0xf) ! Store Group add %o1, 8, %o1 ! IEU1 srlx %g2, 32, %g2 ! IEU0 Group EX2(STW %g2, [%o0 - 0x8] ASINORMAL, and %o2, 0xf, %o2, sub %o2, 4) ! Store#else /* !REGS_64BIT */ lduw [%o1], %g2 ! Load Group add %o0, 8, %o0 ! IEU0 lduw [%o1 + 0x4], %g3 ! Load Group add %o1, 8, %o1 ! IEU0 stw %g2, [%o0 - 0x8] ! Store Group stw %g3, [%o0 - 0x4] ! Store Group#endif /* !REGS_64BIT */81: be,pt %xcc, 1f ! CTI andcc %o2, 2, %g0 ! IEU1 Group ASI_SETSRC_NOBLK ! LSU Group EX(LDUW [%o1] ASINORMAL, %g2, and %o2, 0x7) ! Load Group add %o1, 4, %o1 ! IEU0 ASI_SETDST_NOBLK ! LSU Group EX(STW %g2, [%o0] ASINORMAL, and %o2, 0x7) ! Store Group add %o0, 4, %o0 ! IEU01: be,pt %xcc, 1f ! CTI andcc %o2, 1, %g0 ! IEU1 Group ASI_SETSRC_NOBLK ! LSU Group EX(LDUH [%o1] ASINORMAL, %g2, and %o2, 0x3) ! Load Group add %o1, 2, %o1 ! IEU0 ASI_SETDST_NOBLK ! LSU Group EX(STH %g2, [%o0] ASINORMAL, and %o2, 0x3) ! Store Group add %o0, 2, %o0 ! IEU01: be,pt %xcc, normal_retl ! CTI nop ! IEU1 ASI_SETSRC_NOBLK ! LSU Group EX(LDUB [%o1] ASINORMAL, %g2, add %g0, 1) ! Load Group ASI_SETDST_NOBLK ! LSU Group EX(STB %g2, [%o0] ASINORMAL, add %g0, 1) ! Store Group + bubblenormal_retl: NORMAL_RETL#ifdef REGS_64BIT82: MOVE_BIGALIGNCHUNK(o1, o0, 0x00, g1, g3, g5, o5) MOVE_BIGALIGNCHUNK(o1, o0, 0x40, g1, g3, g5, o5) EXT(82b,37f,VIScopyfixup3)37: subcc %g7, 128, %g7 ! IEU1 Group add %o1, 128, %o1 ! IEU0 bne,pt %xcc, 82b ! CTI add %o0, 128, %o0 ! IEU0 Group andcc %o2, 0x70, %g7 ! IEU1 be,pn %xcc, 84f ! CTI andcc %o2, 8, %g0 ! IEU1 Group#ifdef __KERNEL__83: srl %g7, 1, %g5 ! IEU0 sethi %hi(84f), %o5 ! IEU0 Group add %g7, %g5, %g5 ! IEU1 add %o1, %g7, %o1 ! IEU0 Group sub %o5, %g5, %o5 ! IEU1 jmpl %o5 + %lo(84f), %g0 ! CTI Group brk forced add %o0, %g7, %o0 ! IEU0 Group#else ! Clk1 8-( ! Clk2 8-( ! Clk3 8-( ! Clk4 8-(83: rd %pc, %o5 ! PDU Group add %o1, %g7, %o1 ! IEU0 Group sub %o5, %g7, %o5 ! IEU1 jmpl %o5 + %lo(84f - 83b), %g0 ! CTI Group brk forced add %o0, %g7, %o0 ! IEU0 Group#endif38: MOVE_LASTALIGNCHUNK(o1, o0, 0x60, g2, g3) MOVE_LASTALIGNCHUNK(o1, o0, 0x50, g2, g3) MOVE_LASTALIGNCHUNK(o1, o0, 0x40, g2, g3) MOVE_LASTALIGNCHUNK(o1, o0, 0x30, g2, g3) MOVE_LASTALIGNCHUNK(o1, o0, 0x20, g2, g3) MOVE_LASTALIGNCHUNK(o1, o0, 0x10, g2, g3) MOVE_LASTALIGNCHUNK(o1, o0, 0x00, g2, g3) EXT(38b,84f,VIScopyfixup4)84: be,pt %xcc, 85f ! CTI Group andcc %o2, 4, %g0 ! IEU1 ASI_SETSRC_NOBLK ! LSU Group EX(LDX [%o1] ASINORMAL, %g2, and %o2, 0xf) ! Load Group add %o0, 8, %o0 ! IEU0 ASI_SETDST_NOBLK ! LSU Group add %o1, 8, %o1 ! IEU0 Group EX(STX %g2, [%o0 - 0x8] ASINORMAL, and %o2, 0xf) ! Store85: be,pt %xcc, 1f ! CTI andcc %o2, 2, %g0 ! IEU1 Group ASI_SETSRC_NOBLK ! LSU Group EX(LDUW [%o1] ASINORMAL, %g2, and %o2, 0x7) ! Load Group add %o0, 4, %o0 ! IEU0 ASI_SETDST_NOBLK ! LSU Group add %o1, 4, %o1 ! IEU0 Group EX(STW %g2, [%o0 - 0x4] ASINORMAL, and %o2, 0x7) ! Store1: be,pt %xcc, 1f ! CTI andcc %o2, 1, %g0 ! IEU1 Group ASI_SETSRC_NOBLK ! LSU Group EX(LDUH [%o1] ASINORMAL, %g2, and %o2, 0x3) ! Load Group add %o0, 2, %o0 ! IEU0 ASI_SETDST_NOBLK ! LSU Group add %o1, 2, %o1 ! IEU0 Group EX(STH %g2, [%o0 - 0x2] ASINORMAL, and %o2, 0x3) ! Store1: be,pt %xcc, 1f ! CTI nop ! IEU0 Group ASI_SETSRC_NOBLK ! LSU Group EX(LDUB [%o1] ASINORMAL, %g2, add %g0, 1) ! Load Group ASI_SETDST_NOBLK ! LSU Group EX(STB %g2, [%o0] ASINORMAL, add %g0, 1) ! Store Group + bubble1: NORMAL_RETL#endif /* REGS_64BIT */memcpy_noVIS_misaligned: brz,pt %g2, 2f ! CTI Group mov 8, %g1 ! IEU0 sub %g1, %g2, %g2 ! IEU0 Group sub %o2, %g2, %o2 ! IEU0 Group1: ASI_SETSRC_NOBLK ! LSU Group EX(LDUB [%o1] ASINORMAL, %g5, add %o2, %g2) ! Load Group add %o1, 1, %o1 ! IEU0 add %o0, 1, %o0 ! IEU1 ASI_SETDST_NOBLK ! LSU Group subcc %g2, 1, %g2 ! IEU1 Group bne,pt %xcc, 1b ! CTI EX2(STB %g5, [%o0 - 1] ASINORMAL, add %o2, %g2, %o2, add %o2, 1) ! Store2:#ifdef __KERNEL__ VISEntry#endif andn %o2, 7, %g5 ! IEU0 Group and %o2, 7, %o2 ! IEU1 fmovd %f0, %f2 ! FPU ASI_SETSRC_NOBLK ! LSU Group alignaddr %o1, %g0, %g1 ! GRU Group EXO2(LDDF [%g1] ASINORMAL, %f4) ! Load Group1: EX(LDDF [%g1 + 0x8] ASINORMAL, %f6, add %o2, %g5) ! Load Group add %g1, 0x8, %g1 ! IEU0 Group subcc %g5, 8, %g5 ! IEU1 ASI_SETDST_NOBLK ! LSU Group faligndata %f4, %f6, %f0 ! GRU Group EX2(STDF %f0, [%o0] ASINORMAL, add %o2, %g5, %o2, add %o2, 8) ! Store add %o1, 8, %o1 ! IEU0 Group be,pn %xcc, end_cruft ! CTI add %o0, 8, %o0 ! IEU1 ASI_SETSRC_NOBLK ! LSU Group EX(LDDF [%g1 + 0x8] ASINORMAL, %f4, add %o2, %g5) ! Load Group add %g1, 8, %g1 ! IEU0 subcc %g5, 8, %g5 ! IEU1 ASI_SETDST_NOBLK ! LSU Group faligndata %f6, %f4, %f0 ! GRU Group EX2(STDF %f0, [%o0] ASINORMAL, add %o2, %g5, %o2, add %o2, 8) ! Store add %o1, 8, %o1 ! IEU0 ASI_SETSRC_NOBLK ! LSU Group bne,pn %xcc, 1b ! CTI Group add %o0, 8, %o0 ! IEU0end_cruft: brz,pn %o2, fpu_retl ! CTI Group#ifndef __KERNEL__ nop ! IEU0#else ASI_SETSRC_NOBLK ! LSU Group#endif EXO2(LDUB [%o1] ASINORMAL, %g5) ! LOAD add %o1, 1, %o1 ! IEU0 add %o0, 1, %o0 ! IEU1 ASI_SETDST_NOBLK ! LSU Group subcc %o2, 1, %o2 ! IEU1 bne,pt %xcc, vis_slp ! CTI EX(STB %g5, [%o0 - 1] ASINORMAL, add %o2, 1) ! Store Groupfpu_retl: FPU_RETL#ifdef __KERNEL__ .section .fixup .align 4VIScopyfixup_reto2: mov %o2, %o1VIScopyfixup_ret: /* If this is copy_from_user(), zero out the rest of the * kernel buffer. */ ldub [%g6 + TI_CURRENT_DS], %o4 andcc asi_src, 0x1, %g0 be,pt %icc, 1f VISExit andcc asi_dest, 0x1, %g0 bne,pn %icc, 1f nop save %sp, -160, %sp mov %i0, %o0 call __bzero mov %i1, %o1 restore1: mov %o1, %o0 retl wr %o4, %g0, %asiVIScopyfixup1: subcc %g2, 18, %g2 add %o0, 32, %o0 bgeu,a,pt %icc, VIScopyfixup1 sub %g7, 32, %g7 sub %o0, 32, %o0 rd %pc, %g5 add %g2, (18 + 16), %g2 ldub [%g5 + %g2], %g2 ba,a,pt %xcc, 2f.byte 0, 0, 0, 0, 0, 0, 0, 4, 4, 8, 12, 12, 16, 20, 20, 24, 28, 28 .align 4VIScopyfixup2: mov (7 * 16), %g71: subcc %g2, 10, %g2 bgeu,a,pt %icc, 1b sub %g7, 16, %g7 sub %o0, %g7, %o0 rd %pc, %g5 add %g2, (10 + 16), %g2 ldub [%g5 + %g2], %g2 ba,a,pt %xcc, 4f.byte 0, 0, 0, 0, 0, 4, 4, 8, 12, 12 .align 4VIScopyfixup3: subcc %g2, 10, %g2 add %o0, 32, %o0 bgeu,a,pt %icc, VIScopyfixup3 sub %g7, 32, %g7 sub %o0, 32, %o0 rd %pc, %g5 add %g2, (10 + 16), %g2 ldub [%g5 + %g2], %g2 ba,a,pt %xcc, 2f.byte 0, 0, 0, 0, 0, 0, 0, 8, 16, 24 .align 42: and %o2, 0x7f, %o2 sub %g7, %g2, %g7 ba,pt %xcc, VIScopyfixup_ret add %g7, %o2, %o1VIScopyfixup4: mov (7 * 16), %g73: subcc %g2, 6, %g2 bgeu,a,pt %icc, 3b sub %g7, 16, %g7 sub %o0, %g7, %o0 rd %pc, %g5 add %g2, (6 + 16), %g2 ldub [%g5 + %g2], %g2 ba,a,pt %xcc, 4f.byte 0, 0, 0, 0, 0, 8 .align 44: and %o2, 0xf, %o2 sub %g7, %g2, %g7 ba,pt %xcc, VIScopyfixup_ret add %g7, %o2, %o1VIScopyfixup_vis2: sub %o2, 0x40, %o2VIScopyfixup_vis0: add %o2, 0x80, %o2VIScopyfixup_vis1: add %g7, %g3, %g7 ba,pt %xcc, VIScopyfixup_ret add %o2, %g7, %o1VIScopyfixup_vis4: add %g3, 8, %g3VIScopyfixup_vis3: add %g3, 8, %g3 ba,pt %xcc, VIScopyfixup_ret add %o2, %g3, %o1#endif#ifdef __KERNEL__ .text .align 32 .globl __memmove .type __memmove,@function .globl memmove .type memmove,@functionmemmove:__memmove: cmp %o0, %o1 blu,pt %xcc, memcpy_private sub %o0, %o1, %g5 add %o1, %o2, %g3 cmp %g3, %o0 bleu,pt %xcc, memcpy_private add %o1, %o2, %g5 add %o0, %o2, %o5 sub %g5, 1, %o1 sub %o5, 1, %o01: ldub [%o1], %g5 subcc %o2, 1, %o2 sub %o1, 1, %o1 stb %g5, [%o0] bne,pt %icc, 1b sub %o0, 1, %o0 retl clr %o0#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -