1e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* memcpy.S: Sparc optimized memcpy and memmove code 2e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Hand optimized from GNU libc's memcpy and memmove 3e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Copyright (C) 1991,1996 Free Software Foundation 4e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Copyright (C) 1995 Linus Torvalds (Linus.Torvalds@helsinki.fi) 5e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) 6e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Copyright (C) 1996 Eddie C. Dost (ecd@skynet.be) 7e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Copyright (C) 1996 Jakub Jelinek (jj@sunsite.mff.cuni.cz) 8e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 9e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 10e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define FUNC(x) \ 11e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .globl x; \ 12e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .type x,@function; \ 13e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .align 4; \ 14e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengx: 15e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 16e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* Both these macros have to start with exactly the same insn */ 17e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define MOVE_BIGCHUNK(src, dst, offset, t0, t1, t2, t3, t4, t5, t6, t7) \ 18e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src + (offset) + 0x00], %t0; \ 19e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src + (offset) + 0x08], %t2; \ 20e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src + (offset) + 0x10], %t4; \ 21e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src + (offset) + 0x18], %t6; \ 22e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %t0, [%dst + (offset) + 0x00]; \ 23e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %t1, [%dst + (offset) + 0x04]; \ 24e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %t2, [%dst + (offset) + 0x08]; \ 25e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %t3, [%dst + (offset) + 0x0c]; \ 26e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %t4, [%dst + (offset) + 0x10]; \ 27e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %t5, [%dst + (offset) + 0x14]; \ 28e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %t6, [%dst + (offset) + 0x18]; \ 29e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %t7, [%dst + (offset) + 0x1c]; 30e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 31e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define MOVE_BIGALIGNCHUNK(src, dst, offset, t0, t1, t2, t3, t4, t5, t6, t7) \ 32e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src + (offset) + 0x00], %t0; \ 33e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src + (offset) + 0x08], %t2; \ 34e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src + (offset) + 0x10], %t4; \ 35e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src + (offset) + 0x18], %t6; \ 36e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng std %t0, [%dst + (offset) + 0x00]; \ 37e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng std %t2, [%dst + (offset) + 0x08]; \ 38e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng std %t4, [%dst + (offset) + 0x10]; \ 39e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng std %t6, [%dst + (offset) + 0x18]; 40e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 41e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define MOVE_LASTCHUNK(src, dst, offset, t0, t1, t2, t3) \ 42e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src - (offset) - 0x10], %t0; \ 43e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src - (offset) - 0x08], %t2; \ 44e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %t0, [%dst - (offset) - 0x10]; \ 45e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %t1, [%dst - (offset) - 0x0c]; \ 46e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %t2, [%dst - (offset) - 0x08]; \ 47e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %t3, [%dst - (offset) - 0x04]; 48e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 49e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define MOVE_LASTALIGNCHUNK(src, dst, offset, t0, t1, t2, t3) \ 50e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src - (offset) - 0x10], %t0; \ 51e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src - (offset) - 0x08], %t2; \ 52e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng std %t0, [%dst - (offset) - 0x10]; \ 53e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng std %t2, [%dst - (offset) - 0x08]; 54e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 55e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define MOVE_SHORTCHUNK(src, dst, offset, t0, t1) \ 56e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldub [%src - (offset) - 0x02], %t0; \ 57e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldub [%src - (offset) - 0x01], %t1; \ 58e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng stb %t0, [%dst - (offset) - 0x02]; \ 59e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng stb %t1, [%dst - (offset) - 0x01]; 60e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 61e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* Both these macros have to start with exactly the same insn */ 62e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define RMOVE_BIGCHUNK(src, dst, offset, t0, t1, t2, t3, t4, t5, t6, t7) \ 63e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src - (offset) - 0x20], %t0; \ 64e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src - (offset) - 0x18], %t2; \ 65e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src - (offset) - 0x10], %t4; \ 66e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src - (offset) - 0x08], %t6; \ 67e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %t0, [%dst - (offset) - 0x20]; \ 68e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %t1, [%dst - (offset) - 0x1c]; \ 69e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %t2, [%dst - (offset) - 0x18]; \ 70e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %t3, [%dst - (offset) - 0x14]; \ 71e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %t4, [%dst - (offset) - 0x10]; \ 72e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %t5, [%dst - (offset) - 0x0c]; \ 73e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %t6, [%dst - (offset) - 0x08]; \ 74e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %t7, [%dst - (offset) - 0x04]; 75e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 76e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define RMOVE_BIGALIGNCHUNK(src, dst, offset, t0, t1, t2, t3, t4, t5, t6, t7) \ 77e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src - (offset) - 0x20], %t0; \ 78e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src - (offset) - 0x18], %t2; \ 79e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src - (offset) - 0x10], %t4; \ 80e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src - (offset) - 0x08], %t6; \ 81e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng std %t0, [%dst - (offset) - 0x20]; \ 82e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng std %t2, [%dst - (offset) - 0x18]; \ 83e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng std %t4, [%dst - (offset) - 0x10]; \ 84e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng std %t6, [%dst - (offset) - 0x08]; 85e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 86e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define RMOVE_LASTCHUNK(src, dst, offset, t0, t1, t2, t3) \ 87e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src + (offset) + 0x00], %t0; \ 88e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src + (offset) + 0x08], %t2; \ 89e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %t0, [%dst + (offset) + 0x00]; \ 90e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %t1, [%dst + (offset) + 0x04]; \ 91e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %t2, [%dst + (offset) + 0x08]; \ 92e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %t3, [%dst + (offset) + 0x0c]; 93e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 94e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define RMOVE_SHORTCHUNK(src, dst, offset, t0, t1) \ 95e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldub [%src + (offset) + 0x00], %t0; \ 96e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldub [%src + (offset) + 0x01], %t1; \ 97e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng stb %t0, [%dst + (offset) + 0x00]; \ 98e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng stb %t1, [%dst + (offset) + 0x01]; 99e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 100e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define SMOVE_CHUNK(src, dst, offset, t0, t1, t2, t3, t4, t5, t6, prev, shil, shir, offset2) \ 101e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src + (offset) + 0x00], %t0; \ 102e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src + (offset) + 0x08], %t2; \ 103e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng srl %t0, shir, %t5; \ 104e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng srl %t1, shir, %t6; \ 105e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sll %t0, shil, %t0; \ 106e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng or %t5, %prev, %t5; \ 107e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sll %t1, shil, %prev; \ 108e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng or %t6, %t0, %t0; \ 109e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng srl %t2, shir, %t1; \ 110e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng srl %t3, shir, %t6; \ 111e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sll %t2, shil, %t2; \ 112e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng or %t1, %prev, %t1; \ 113e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng std %t4, [%dst + (offset) + (offset2) - 0x04]; \ 114e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng std %t0, [%dst + (offset) + (offset2) + 0x04]; \ 115e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sll %t3, shil, %prev; \ 116e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng or %t6, %t2, %t4; 117e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 118e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define SMOVE_ALIGNCHUNK(src, dst, offset, t0, t1, t2, t3, t4, t5, t6, prev, shil, shir, offset2) \ 119e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src + (offset) + 0x00], %t0; \ 120e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%src + (offset) + 0x08], %t2; \ 121e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng srl %t0, shir, %t4; \ 122e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng srl %t1, shir, %t5; \ 123e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sll %t0, shil, %t6; \ 124e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng or %t4, %prev, %t0; \ 125e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sll %t1, shil, %prev; \ 126e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng or %t5, %t6, %t1; \ 127e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng srl %t2, shir, %t4; \ 128e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng srl %t3, shir, %t5; \ 129e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sll %t2, shil, %t6; \ 130e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng or %t4, %prev, %t2; \ 131e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sll %t3, shil, %prev; \ 132e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng or %t5, %t6, %t3; \ 133e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng std %t0, [%dst + (offset) + (offset2) + 0x00]; \ 134e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng std %t2, [%dst + (offset) + (offset2) + 0x08]; 135e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 136e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .text 137e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .align 4 138e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 139e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng0: 140e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng retl 141e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng nop ! Only bcopy returns here and it retuns void... 142e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 143e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#ifdef __KERNEL__ 144e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengFUNC(amemmove) 145e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengFUNC(__memmove) 146e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#endif 147e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengFUNC(memmove) 148e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng cmp %o0, %o1 149e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng mov %o0, %g7 150e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng bleu 9f 151e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sub %o0, %o1, %o4 152e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 153e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o1, %o2, %o3 154e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng cmp %o3, %o0 155e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng bleu 0f 156e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %o4, 3, %o5 157e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 158e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o1, %o2, %o1 159e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o0, %o2, %o0 160e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sub %o1, 1, %o1 161e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sub %o0, 1, %o0 162e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 163e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng1: /* reverse_bytes */ 164e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 165e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldub [%o1], %o4 166e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng subcc %o2, 1, %o2 167e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng stb %o4, [%o0] 168e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sub %o1, 1, %o1 169e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng bne 1b 170e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sub %o0, 1, %o0 171e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 172e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng retl 173e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng mov %g7, %o0 174e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 175e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* NOTE: This code is executed just for the cases, 176e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng where %src (=%o1) & 3 is != 0. 177e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng We need to align it to 4. So, for (%src & 3) 178e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 1 we need to do ldub,lduh 179e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 2 lduh 180e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 3 just ldub 181e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng so even if it looks weird, the branches 182e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng are correct here. -jj 183e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 184e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng78: /* dword_align */ 185e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 186e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %o1, 1, %g0 187e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng be 4f 188e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %o1, 2, %g0 189e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 190e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldub [%o1], %g2 191e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o1, 1, %o1 192e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng stb %g2, [%o0] 193e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sub %o2, 1, %o2 194e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng bne 3f 195e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o0, 1, %o0 196e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng4: 197e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng lduh [%o1], %g2 198e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o1, 2, %o1 199e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sth %g2, [%o0] 200e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sub %o2, 2, %o2 201e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng b 3f 202e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o0, 2, %o0 203e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 204e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengFUNC(memcpy) /* %o0=dst %o1=src %o2=len */ 205e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 206e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sub %o0, %o1, %o4 207e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng mov %o0, %g7 208e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng9: 209e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %o4, 3, %o5 210e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng0: 211e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng bne 86f 212e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng cmp %o2, 15 213e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 214e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng bleu 90f 215e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %o1, 3, %g0 216e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 217e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng bne 78b 218e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng3: 219e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %o1, 4, %g0 220e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 221e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng be 2f 222e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng mov %o2, %g1 223e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 224e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ld [%o1], %o4 225e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sub %g1, 4, %g1 226e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %o4, [%o0] 227e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o1, 4, %o1 228e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o0, 4, %o0 229e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng2: 230e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %g1, 0xffffff80, %g0 231e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng be 3f 232e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %o0, 4, %g0 233e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 234e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng be 82f + 4 235e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng5: 236e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_BIGCHUNK(o1, o0, 0x00, o2, o3, o4, o5, g2, g3, g4, g5) 237e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_BIGCHUNK(o1, o0, 0x20, o2, o3, o4, o5, g2, g3, g4, g5) 238e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_BIGCHUNK(o1, o0, 0x40, o2, o3, o4, o5, g2, g3, g4, g5) 239e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_BIGCHUNK(o1, o0, 0x60, o2, o3, o4, o5, g2, g3, g4, g5) 240e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sub %g1, 128, %g1 241e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o1, 128, %o1 242e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng cmp %g1, 128 243e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng bge 5b 244e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o0, 128, %o0 245e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng3: 246e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %g1, 0x70, %g4 247e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng be 80f 248e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %g1, 8, %g0 249e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 250e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sethi %hi(80f), %o5 251e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng srl %g4, 1, %o4 252e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %g4, %o4, %o4 253e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o1, %g4, %o1 254e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sub %o5, %o4, %o5 255e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng jmpl %o5 + %lo(80f), %g0 256e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o0, %g4, %o0 257e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 258e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng79: /* memcpy_table */ 259e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 260e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_LASTCHUNK(o1, o0, 0x60, g2, g3, g4, g5) 261e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_LASTCHUNK(o1, o0, 0x50, g2, g3, g4, g5) 262e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_LASTCHUNK(o1, o0, 0x40, g2, g3, g4, g5) 263e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_LASTCHUNK(o1, o0, 0x30, g2, g3, g4, g5) 264e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_LASTCHUNK(o1, o0, 0x20, g2, g3, g4, g5) 265e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_LASTCHUNK(o1, o0, 0x10, g2, g3, g4, g5) 266e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_LASTCHUNK(o1, o0, 0x00, g2, g3, g4, g5) 267e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 268e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng80: /* memcpy_table_end */ 269e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng be 81f 270e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %g1, 4, %g0 271e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 272e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%o1], %g2 273e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o0, 8, %o0 274e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %g2, [%o0 - 0x08] 275e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o1, 8, %o1 276e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %g3, [%o0 - 0x04] 277e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 278e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng81: /* memcpy_last7 */ 279e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 280e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng be 1f 281e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %g1, 2, %g0 282e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 283e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ld [%o1], %g2 284e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o1, 4, %o1 285e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %g2, [%o0] 286e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o0, 4, %o0 287e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng1: 288e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng be 1f 289e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %g1, 1, %g0 290e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 291e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng lduh [%o1], %g2 292e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o1, 2, %o1 293e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sth %g2, [%o0] 294e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o0, 2, %o0 295e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng1: 296e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng be 1f 297e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng nop 298e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 299e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldub [%o1], %g2 300e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng stb %g2, [%o0] 301e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng1: 302e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng retl 303e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng mov %g7, %o0 304e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 305e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng82: /* ldd_std */ 306e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_BIGALIGNCHUNK(o1, o0, 0x00, o2, o3, o4, o5, g2, g3, g4, g5) 307e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_BIGALIGNCHUNK(o1, o0, 0x20, o2, o3, o4, o5, g2, g3, g4, g5) 308e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_BIGALIGNCHUNK(o1, o0, 0x40, o2, o3, o4, o5, g2, g3, g4, g5) 309e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_BIGALIGNCHUNK(o1, o0, 0x60, o2, o3, o4, o5, g2, g3, g4, g5) 310e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng subcc %g1, 128, %g1 311e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o1, 128, %o1 312e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng cmp %g1, 128 313e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng bge 82b 314e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o0, 128, %o0 315e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 316e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %g1, 0x70, %g4 317e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng be 84f 318e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %g1, 8, %g0 319e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 320e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sethi %hi(84f), %o5 321e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o1, %g4, %o1 322e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sub %o5, %g4, %o5 323e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng jmpl %o5 + %lo(84f), %g0 324e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o0, %g4, %o0 325e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 326e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng83: /* amemcpy_table */ 327e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 328e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_LASTALIGNCHUNK(o1, o0, 0x60, g2, g3, g4, g5) 329e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_LASTALIGNCHUNK(o1, o0, 0x50, g2, g3, g4, g5) 330e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_LASTALIGNCHUNK(o1, o0, 0x40, g2, g3, g4, g5) 331e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_LASTALIGNCHUNK(o1, o0, 0x30, g2, g3, g4, g5) 332e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_LASTALIGNCHUNK(o1, o0, 0x20, g2, g3, g4, g5) 333e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_LASTALIGNCHUNK(o1, o0, 0x10, g2, g3, g4, g5) 334e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_LASTALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5) 335e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 336e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng84: /* amemcpy_table_end */ 337e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng be 85f 338e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %g1, 4, %g0 339e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 340e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldd [%o1], %g2 341e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o0, 8, %o0 342e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng std %g2, [%o0 - 0x08] 343e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o1, 8, %o1 344e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng85: /* amemcpy_last7 */ 345e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng be 1f 346e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %g1, 2, %g0 347e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 348e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ld [%o1], %g2 349e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o1, 4, %o1 350e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %g2, [%o0] 351e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o0, 4, %o0 352e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng1: 353e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng be 1f 354e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %g1, 1, %g0 355e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 356e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng lduh [%o1], %g2 357e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o1, 2, %o1 358e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sth %g2, [%o0] 359e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o0, 2, %o0 360e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng1: 361e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng be 1f 362e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng nop 363e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 364e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldub [%o1], %g2 365e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng stb %g2, [%o0] 366e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng1: 367e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng retl 368e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng mov %g7, %o0 369e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 370e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng86: /* non_aligned */ 371e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng cmp %o2, 6 372e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng bleu 88f 373e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng nop 374e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 375e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng save %sp, -96, %sp 376e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %i0, 3, %g0 377e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng be 61f 378e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %i0, 1, %g0 379e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng be 60f 380e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %i0, 2, %g0 381e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 382e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldub [%i1], %g5 383e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %i1, 1, %i1 384e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng stb %g5, [%i0] 385e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sub %i2, 1, %i2 386e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng bne 61f 387e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %i0, 1, %i0 388e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng60: 389e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldub [%i1], %g3 390e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %i1, 2, %i1 391e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng stb %g3, [%i0] 392e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sub %i2, 2, %i2 393e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldub [%i1 - 1], %g3 394e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %i0, 2, %i0 395e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng stb %g3, [%i0 - 1] 396e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng61: 397e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng and %i1, 3, %g2 398e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng and %i2, 0xc, %g3 399e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng and %i1, -4, %i1 400e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng cmp %g3, 4 401e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sll %g2, 3, %g4 402e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng mov 32, %g2 403e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng be 4f 404e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sub %g2, %g4, %l0 405e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 406e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng blu 3f 407e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng cmp %g3, 0x8 408e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 409e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng be 2f 410e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng srl %i2, 2, %g3 411e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 412e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ld [%i1], %i3 413e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %i0, -8, %i0 414e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ld [%i1 + 4], %i4 415e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng b 8f 416e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %g3, 1, %g3 417e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng2: 418e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ld [%i1], %i4 419e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %i0, -12, %i0 420e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ld [%i1 + 4], %i5 421e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %g3, 2, %g3 422e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng b 9f 423e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %i1, -4, %i1 424e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng3: 425e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ld [%i1], %g1 426e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %i0, -4, %i0 427e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ld [%i1 + 4], %i3 428e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng srl %i2, 2, %g3 429e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng b 7f 430e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %i1, 4, %i1 431e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng4: 432e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ld [%i1], %i5 433e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng cmp %i2, 7 434e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ld [%i1 + 4], %g1 435e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng srl %i2, 2, %g3 436e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng bleu 10f 437e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %i1, 8, %i1 438e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 439e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ld [%i1], %i3 440e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %g3, -1, %g3 441e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng5: 442e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sll %i5, %g4, %g2 443e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng srl %g1, %l0, %g5 444e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng or %g2, %g5, %g2 445e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %g2, [%i0] 446e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng7: 447e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ld [%i1 + 4], %i4 448e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sll %g1, %g4, %g2 449e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng srl %i3, %l0, %g5 450e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng or %g2, %g5, %g2 451e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %g2, [%i0 + 4] 452e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng8: 453e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ld [%i1 + 8], %i5 454e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sll %i3, %g4, %g2 455e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng srl %i4, %l0, %g5 456e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng or %g2, %g5, %g2 457e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %g2, [%i0 + 8] 458e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng9: 459e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ld [%i1 + 12], %g1 460e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sll %i4, %g4, %g2 461e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng srl %i5, %l0, %g5 462e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng addcc %g3, -4, %g3 463e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng or %g2, %g5, %g2 464e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %i1, 16, %i1 465e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %g2, [%i0 + 12] 466e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %i0, 16, %i0 467e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng bne,a 5b 468e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ld [%i1], %i3 469e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng10: 470e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sll %i5, %g4, %g2 471e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng srl %g1, %l0, %g5 472e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng srl %l0, 3, %g3 473e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng or %g2, %g5, %g2 474e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sub %i1, %g3, %i1 475e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %i2, 2, %g0 476e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %g2, [%i0] 477e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng be 1f 478e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %i2, 1, %g0 479e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 480e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldub [%i1], %g2 481e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %i1, 2, %i1 482e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng stb %g2, [%i0 + 4] 483e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %i0, 2, %i0 484e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldub [%i1 - 1], %g2 485e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng stb %g2, [%i0 + 3] 486e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng1: 487e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng be 1f 488e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng nop 489e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldub [%i1], %g2 490e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng stb %g2, [%i0 + 4] 491e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng1: 492e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ret 493e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng restore %g7, %g0, %o0 494e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 495e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng88: /* short_end */ 496e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 497e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng and %o2, 0xe, %o3 498e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng20: 499e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sethi %hi(89f), %o5 500e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sll %o3, 3, %o4 501e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o0, %o3, %o0 502e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng sub %o5, %o4, %o5 503e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o1, %o3, %o1 504e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng jmpl %o5 + %lo(89f), %g0 505e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %o2, 1, %g0 506e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 507e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_SHORTCHUNK(o1, o0, 0x0c, g2, g3) 508e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_SHORTCHUNK(o1, o0, 0x0a, g2, g3) 509e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_SHORTCHUNK(o1, o0, 0x08, g2, g3) 510e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_SHORTCHUNK(o1, o0, 0x06, g2, g3) 511e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_SHORTCHUNK(o1, o0, 0x04, g2, g3) 512e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_SHORTCHUNK(o1, o0, 0x02, g2, g3) 513e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng MOVE_SHORTCHUNK(o1, o0, 0x00, g2, g3) 514e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 515e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng89: /* short_table_end */ 516e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 517e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng be 1f 518e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng nop 519e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 520e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ldub [%o1], %g2 521e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng stb %g2, [%o0] 522e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng1: 523e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng retl 524e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng mov %g7, %o0 525e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 526e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng90: /* short_aligned_end */ 527e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng bne 88b 528e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %o2, 8, %g0 529e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 530e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng be 1f 531e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng andcc %o2, 4, %g0 532e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 533e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ld [%o1 + 0x00], %g2 534e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng ld [%o1 + 0x04], %g3 535e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o1, 8, %o1 536e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %g2, [%o0 + 0x00] 537e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng st %g3, [%o0 + 0x04] 538e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng add %o0, 8, %o0 539e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng1: 540e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng b 81b 541e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng mov %o2, %g1 542