yuezonghe | 824eb0c | 2024-06-27 02:32:26 -0700 | [diff] [blame^] | 1 | /* Copy SIZE bytes from SRC to DEST. |
| 2 | For SPARC v7. |
| 3 | Copyright (C) 1996, 1999, 2003 Free Software Foundation, Inc. |
| 4 | This file is part of the GNU C Library. |
| 5 | Contributed by David S. Miller <davem@caip.rutgers.edu>, |
| 6 | Eddie C. Dost <ecd@skynet.be> and |
| 7 | Jakub Jelinek <jj@ultra.linux.cz>. |
| 8 | |
| 9 | The GNU C Library is free software; you can redistribute it and/or |
| 10 | modify it under the terms of the GNU Lesser General Public |
| 11 | License as published by the Free Software Foundation; either |
| 12 | version 2.1 of the License, or (at your option) any later version. |
| 13 | |
| 14 | The GNU C Library is distributed in the hope that it will be useful, |
| 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 17 | Lesser General Public License for more details. |
| 18 | |
| 19 | You should have received a copy of the GNU Lesser General Public |
| 20 | License along with the GNU C Library; if not, write to the Free |
| 21 | Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA |
| 22 | 02111-1307 USA. */ |
| 23 | |
| 24 | #include <features.h> |
| 25 | |
| 26 | /* Both these macros have to start with exactly the same insn */ |
| 27 | #define MOVE_BIGCHUNK(src, dst, offset, t0, t1, t2, t3, t4, t5, t6, t7) \ |
| 28 | ldd [%src + offset + 0x00], %t0; \ |
| 29 | ldd [%src + offset + 0x08], %t2; \ |
| 30 | ldd [%src + offset + 0x10], %t4; \ |
| 31 | ldd [%src + offset + 0x18], %t6; \ |
| 32 | st %t0, [%dst + offset + 0x00]; \ |
| 33 | st %t1, [%dst + offset + 0x04]; \ |
| 34 | st %t2, [%dst + offset + 0x08]; \ |
| 35 | st %t3, [%dst + offset + 0x0c]; \ |
| 36 | st %t4, [%dst + offset + 0x10]; \ |
| 37 | st %t5, [%dst + offset + 0x14]; \ |
| 38 | st %t6, [%dst + offset + 0x18]; \ |
| 39 | st %t7, [%dst + offset + 0x1c]; |
| 40 | |
| 41 | #define MOVE_BIGALIGNCHUNK(src, dst, offset, t0, t1, t2, t3, t4, t5, t6, t7) \ |
| 42 | ldd [%src + offset + 0x00], %t0; \ |
| 43 | ldd [%src + offset + 0x08], %t2; \ |
| 44 | ldd [%src + offset + 0x10], %t4; \ |
| 45 | ldd [%src + offset + 0x18], %t6; \ |
| 46 | std %t0, [%dst + offset + 0x00]; \ |
| 47 | std %t2, [%dst + offset + 0x08]; \ |
| 48 | std %t4, [%dst + offset + 0x10]; \ |
| 49 | std %t6, [%dst + offset + 0x18]; |
| 50 | |
| 51 | #define MOVE_LASTCHUNK(src, dst, offset, t0, t1, t2, t3) \ |
| 52 | ldd [%src - offset - 0x10], %t0; \ |
| 53 | ldd [%src - offset - 0x08], %t2; \ |
| 54 | st %t0, [%dst - offset - 0x10]; \ |
| 55 | st %t1, [%dst - offset - 0x0c]; \ |
| 56 | st %t2, [%dst - offset - 0x08]; \ |
| 57 | st %t3, [%dst - offset - 0x04]; |
| 58 | |
| 59 | #define MOVE_LASTALIGNCHUNK(src, dst, offset, t0, t1, t2, t3) \ |
| 60 | ldd [%src - offset - 0x10], %t0; \ |
| 61 | ldd [%src - offset - 0x08], %t2; \ |
| 62 | std %t0, [%dst - offset - 0x10]; \ |
| 63 | std %t2, [%dst - offset - 0x08]; |
| 64 | |
| 65 | #define MOVE_SHORTCHUNK(src, dst, offset, t0, t1) \ |
| 66 | ldub [%src - offset - 0x02], %t0; \ |
| 67 | ldub [%src - offset - 0x01], %t1; \ |
| 68 | stb %t0, [%dst - offset - 0x02]; \ |
| 69 | stb %t1, [%dst - offset - 0x01]; |
| 70 | |
| 71 | /* Both these macros have to start with exactly the same insn */ |
| 72 | #define RMOVE_BIGCHUNK(src, dst, offset, t0, t1, t2, t3, t4, t5, t6, t7) \ |
| 73 | ldd [%src - offset - 0x20], %t0; \ |
| 74 | ldd [%src - offset - 0x18], %t2; \ |
| 75 | ldd [%src - offset - 0x10], %t4; \ |
| 76 | ldd [%src - offset - 0x08], %t6; \ |
| 77 | st %t0, [%dst - offset - 0x20]; \ |
| 78 | st %t1, [%dst - offset - 0x1c]; \ |
| 79 | st %t2, [%dst - offset - 0x18]; \ |
| 80 | st %t3, [%dst - offset - 0x14]; \ |
| 81 | st %t4, [%dst - offset - 0x10]; \ |
| 82 | st %t5, [%dst - offset - 0x0c]; \ |
| 83 | st %t6, [%dst - offset - 0x08]; \ |
| 84 | st %t7, [%dst - offset - 0x04]; |
| 85 | |
| 86 | #define RMOVE_BIGALIGNCHUNK(src, dst, offset, t0, t1, t2, t3, t4, t5, t6, t7) \ |
| 87 | ldd [%src - offset - 0x20], %t0; \ |
| 88 | ldd [%src - offset - 0x18], %t2; \ |
| 89 | ldd [%src - offset - 0x10], %t4; \ |
| 90 | ldd [%src - offset - 0x08], %t6; \ |
| 91 | std %t0, [%dst - offset - 0x20]; \ |
| 92 | std %t2, [%dst - offset - 0x18]; \ |
| 93 | std %t4, [%dst - offset - 0x10]; \ |
| 94 | std %t6, [%dst - offset - 0x08]; |
| 95 | |
| 96 | #define RMOVE_LASTCHUNK(src, dst, offset, t0, t1, t2, t3) \ |
| 97 | ldd [%src + offset + 0x00], %t0; \ |
| 98 | ldd [%src + offset + 0x08], %t2; \ |
| 99 | st %t0, [%dst + offset + 0x00]; \ |
| 100 | st %t1, [%dst + offset + 0x04]; \ |
| 101 | st %t2, [%dst + offset + 0x08]; \ |
| 102 | st %t3, [%dst + offset + 0x0c]; |
| 103 | |
| 104 | #define RMOVE_SHORTCHUNK(src, dst, offset, t0, t1) \ |
| 105 | ldub [%src + offset + 0x00], %t0; \ |
| 106 | ldub [%src + offset + 0x01], %t1; \ |
| 107 | stb %t0, [%dst + offset + 0x00]; \ |
| 108 | stb %t1, [%dst + offset + 0x01]; |
| 109 | |
| 110 | #define SMOVE_CHUNK(src, dst, offset, t0, t1, t2, t3, t4, t5, t6, prev, shil, shir, offset2) \ |
| 111 | ldd [%src + offset + 0x00], %t0; \ |
| 112 | ldd [%src + offset + 0x08], %t2; \ |
| 113 | srl %t0, shir, %t5; \ |
| 114 | srl %t1, shir, %t6; \ |
| 115 | sll %t0, shil, %t0; \ |
| 116 | or %t5, %prev, %t5; \ |
| 117 | sll %t1, shil, %prev; \ |
| 118 | or %t6, %t0, %t0; \ |
| 119 | srl %t2, shir, %t1; \ |
| 120 | srl %t3, shir, %t6; \ |
| 121 | sll %t2, shil, %t2; \ |
| 122 | or %t1, %prev, %t1; \ |
| 123 | std %t4, [%dst + offset + offset2 - 0x04]; \ |
| 124 | std %t0, [%dst + offset + offset2 + 0x04]; \ |
| 125 | sll %t3, shil, %prev; \ |
| 126 | or %t6, %t2, %t4; |
| 127 | |
| 128 | #define SMOVE_ALIGNCHUNK(src, dst, offset, t0, t1, t2, t3, t4, t5, t6, prev, shil, shir, offset2) \ |
| 129 | ldd [%src + offset + 0x00], %t0; \ |
| 130 | ldd [%src + offset + 0x08], %t2; \ |
| 131 | srl %t0, shir, %t4; \ |
| 132 | srl %t1, shir, %t5; \ |
| 133 | sll %t0, shil, %t6; \ |
| 134 | or %t4, %prev, %t0; \ |
| 135 | sll %t1, shil, %prev; \ |
| 136 | or %t5, %t6, %t1; \ |
| 137 | srl %t2, shir, %t4; \ |
| 138 | srl %t3, shir, %t5; \ |
| 139 | sll %t2, shil, %t6; \ |
| 140 | or %t4, %prev, %t2; \ |
| 141 | sll %t3, shil, %prev; \ |
| 142 | or %t5, %t6, %t3; \ |
| 143 | std %t0, [%dst + offset + offset2 + 0x00]; \ |
| 144 | std %t2, [%dst + offset + offset2 + 0x08]; |
| 145 | |
| 146 | .text |
| 147 | .align 4 |
| 148 | |
| 149 | 70: andcc %o1, 1, %g0 |
| 150 | be 4f |
| 151 | andcc %o1, 2, %g0 |
| 152 | |
| 153 | ldub [%o1 - 1], %g2 |
| 154 | sub %o1, 1, %o1 |
| 155 | stb %g2, [%o0 - 1] |
| 156 | sub %o2, 1, %o2 |
| 157 | be 3f |
| 158 | sub %o0, 1, %o0 |
| 159 | 4: lduh [%o1 - 2], %g2 |
| 160 | sub %o1, 2, %o1 |
| 161 | sth %g2, [%o0 - 2] |
| 162 | sub %o2, 2, %o2 |
| 163 | b 3f |
| 164 | sub %o0, 2, %o0 |
| 165 | |
| 166 | #ifdef __UCLIBC_SUSV3_LEGACY__ |
| 167 | ENTRY(bcopy) |
| 168 | mov %o0, %o3 |
| 169 | mov %o1, %o0 |
| 170 | mov %o3, %o1 |
| 171 | END(bcopy) |
| 172 | #endif |
| 173 | |
| 174 | ENTRY(memmove) |
| 175 | cmp %o0, %o1 |
| 176 | st %o0, [%sp + 64] |
| 177 | bleu 9f |
| 178 | sub %o0, %o1, %o4 |
| 179 | |
| 180 | add %o1, %o2, %o3 |
| 181 | cmp %o3, %o0 |
| 182 | bleu 0f |
| 183 | andcc %o4, 3, %o5 |
| 184 | |
| 185 | add %o1, %o2, %o1 |
| 186 | add %o0, %o2, %o0 |
| 187 | bne 77f |
| 188 | cmp %o2, 15 |
| 189 | bleu 91f |
| 190 | andcc %o1, 3, %g0 |
| 191 | bne 70b |
| 192 | 3: andcc %o1, 4, %g0 |
| 193 | |
| 194 | be 2f |
| 195 | mov %o2, %g1 |
| 196 | |
| 197 | ld [%o1 - 4], %o4 |
| 198 | sub %g1, 4, %g1 |
| 199 | st %o4, [%o0 - 4] |
| 200 | sub %o1, 4, %o1 |
| 201 | sub %o0, 4, %o0 |
| 202 | 2: andcc %g1, 0xffffff80, %g6 |
| 203 | be 3f |
| 204 | andcc %o0, 4, %g0 |
| 205 | |
| 206 | be 74f + 4 |
| 207 | 5: RMOVE_BIGCHUNK(o1, o0, 0x00, o2, o3, o4, o5, g2, g3, g4, g5) |
| 208 | RMOVE_BIGCHUNK(o1, o0, 0x20, o2, o3, o4, o5, g2, g3, g4, g5) |
| 209 | RMOVE_BIGCHUNK(o1, o0, 0x40, o2, o3, o4, o5, g2, g3, g4, g5) |
| 210 | RMOVE_BIGCHUNK(o1, o0, 0x60, o2, o3, o4, o5, g2, g3, g4, g5) |
| 211 | subcc %g6, 128, %g6 |
| 212 | sub %o1, 128, %o1 |
| 213 | bne 5b |
| 214 | sub %o0, 128, %o0 |
| 215 | |
| 216 | 3: andcc %g1, 0x70, %g6 |
| 217 | be 72f |
| 218 | andcc %g1, 8, %g0 |
| 219 | |
| 220 | srl %g6, 1, %o4 |
| 221 | mov %o7, %g2 |
| 222 | add %g6, %o4, %o4 |
| 223 | 101: call 100f |
| 224 | sub %o1, %g6, %o1 |
| 225 | mov %g2, %o7 |
| 226 | jmpl %o5 + (72f - 101b), %g0 |
| 227 | sub %o0, %g6, %o0 |
| 228 | |
| 229 | 71: RMOVE_LASTCHUNK(o1, o0, 0x60, g2, g3, g4, g5) |
| 230 | RMOVE_LASTCHUNK(o1, o0, 0x50, g2, g3, g4, g5) |
| 231 | RMOVE_LASTCHUNK(o1, o0, 0x40, g2, g3, g4, g5) |
| 232 | RMOVE_LASTCHUNK(o1, o0, 0x30, g2, g3, g4, g5) |
| 233 | RMOVE_LASTCHUNK(o1, o0, 0x20, g2, g3, g4, g5) |
| 234 | RMOVE_LASTCHUNK(o1, o0, 0x10, g2, g3, g4, g5) |
| 235 | RMOVE_LASTCHUNK(o1, o0, 0x00, g2, g3, g4, g5) |
| 236 | 72: be 73f |
| 237 | andcc %g1, 4, %g0 |
| 238 | |
| 239 | ldd [%o1 - 0x08], %g2 |
| 240 | sub %o0, 8, %o0 |
| 241 | sub %o1, 8, %o1 |
| 242 | st %g2, [%o0] |
| 243 | st %g3, [%o0 + 0x04] |
| 244 | 73: be 1f |
| 245 | andcc %g1, 2, %g0 |
| 246 | |
| 247 | ld [%o1 - 4], %g2 |
| 248 | sub %o1, 4, %o1 |
| 249 | st %g2, [%o0 - 4] |
| 250 | sub %o0, 4, %o0 |
| 251 | 1: be 1f |
| 252 | andcc %g1, 1, %g0 |
| 253 | |
| 254 | lduh [%o1 - 2], %g2 |
| 255 | sub %o1, 2, %o1 |
| 256 | sth %g2, [%o0 - 2] |
| 257 | sub %o0, 2, %o0 |
| 258 | 1: be 1f |
| 259 | nop |
| 260 | |
| 261 | ldub [%o1 - 1], %g2 |
| 262 | stb %g2, [%o0 - 1] |
| 263 | 1: retl |
| 264 | ld [%sp + 64], %o0 |
| 265 | |
| 266 | 74: RMOVE_BIGALIGNCHUNK(o1, o0, 0x00, o2, o3, o4, o5, g2, g3, g4, g5) |
| 267 | RMOVE_BIGALIGNCHUNK(o1, o0, 0x20, o2, o3, o4, o5, g2, g3, g4, g5) |
| 268 | RMOVE_BIGALIGNCHUNK(o1, o0, 0x40, o2, o3, o4, o5, g2, g3, g4, g5) |
| 269 | RMOVE_BIGALIGNCHUNK(o1, o0, 0x60, o2, o3, o4, o5, g2, g3, g4, g5) |
| 270 | subcc %g6, 128, %g6 |
| 271 | sub %o1, 128, %o1 |
| 272 | bne 74b |
| 273 | sub %o0, 128, %o0 |
| 274 | |
| 275 | andcc %g1, 0x70, %g6 |
| 276 | be 72b |
| 277 | andcc %g1, 8, %g0 |
| 278 | |
| 279 | srl %g6, 1, %o4 |
| 280 | mov %o7, %g2 |
| 281 | add %g6, %o4, %o4 |
| 282 | 102: call 100f |
| 283 | sub %o1, %g6, %o1 |
| 284 | mov %g2, %o7 |
| 285 | jmpl %o5 + (72b - 102b), %g0 |
| 286 | sub %o0, %g6, %o0 |
| 287 | |
| 288 | 75: and %o2, 0xe, %o3 |
| 289 | mov %o7, %g2 |
| 290 | sll %o3, 3, %o4 |
| 291 | sub %o0, %o3, %o0 |
| 292 | 103: call 100f |
| 293 | sub %o1, %o3, %o1 |
| 294 | mov %g2, %o7 |
| 295 | jmpl %o5 + (76f - 103b), %g0 |
| 296 | andcc %o2, 1, %g0 |
| 297 | |
| 298 | RMOVE_SHORTCHUNK(o1, o0, 0x0c, g2, g3) |
| 299 | RMOVE_SHORTCHUNK(o1, o0, 0x0a, g2, g3) |
| 300 | RMOVE_SHORTCHUNK(o1, o0, 0x08, g2, g3) |
| 301 | RMOVE_SHORTCHUNK(o1, o0, 0x06, g2, g3) |
| 302 | RMOVE_SHORTCHUNK(o1, o0, 0x04, g2, g3) |
| 303 | RMOVE_SHORTCHUNK(o1, o0, 0x02, g2, g3) |
| 304 | RMOVE_SHORTCHUNK(o1, o0, 0x00, g2, g3) |
| 305 | |
| 306 | 76: be 1f |
| 307 | nop |
| 308 | ldub [%o1 - 1], %g2 |
| 309 | stb %g2, [%o0 - 1] |
| 310 | 1: retl |
| 311 | ld [%sp + 64], %o0 |
| 312 | |
| 313 | 91: bne 75b |
| 314 | andcc %o2, 8, %g0 |
| 315 | |
| 316 | be 1f |
| 317 | andcc %o2, 4, %g0 |
| 318 | |
| 319 | ld [%o1 - 0x08], %g2 |
| 320 | ld [%o1 - 0x04], %g3 |
| 321 | sub %o1, 8, %o1 |
| 322 | st %g2, [%o0 - 0x08] |
| 323 | st %g3, [%o0 - 0x04] |
| 324 | sub %o0, 8, %o0 |
| 325 | 1: b 73b |
| 326 | mov %o2, %g1 |
| 327 | |
| 328 | 77: cmp %o2, 15 |
| 329 | bleu 75b |
| 330 | andcc %o0, 3, %g0 |
| 331 | be 64f |
| 332 | andcc %o0, 1, %g0 |
| 333 | be 63f |
| 334 | andcc %o0, 2, %g0 |
| 335 | ldub [%o1 - 1], %g5 |
| 336 | sub %o1, 1, %o1 |
| 337 | stb %g5, [%o0 - 1] |
| 338 | sub %o0, 1, %o0 |
| 339 | be 64f |
| 340 | sub %o2, 1, %o2 |
| 341 | |
| 342 | 63: ldub [%o1 - 1], %g5 |
| 343 | sub %o1, 2, %o1 |
| 344 | stb %g5, [%o0 - 1] |
| 345 | sub %o0, 2, %o0 |
| 346 | ldub [%o1], %g5 |
| 347 | sub %o2, 2, %o2 |
| 348 | stb %g5, [%o0] |
| 349 | 64: and %o1, 3, %g2 |
| 350 | and %o1, -4, %o1 |
| 351 | and %o2, 0xc, %g3 |
| 352 | add %o1, 4, %o1 |
| 353 | cmp %g3, 4 |
| 354 | sll %g2, 3, %g4 |
| 355 | mov 32, %g2 |
| 356 | be 4f |
| 357 | sub %g2, %g4, %g6 |
| 358 | |
| 359 | blu 3f |
| 360 | cmp %g3, 8 |
| 361 | |
| 362 | be 2f |
| 363 | srl %o2, 2, %g3 |
| 364 | |
| 365 | ld [%o1 - 4], %o3 |
| 366 | add %o0, -8, %o0 |
| 367 | ld [%o1 - 8], %o4 |
| 368 | add %o1, -16, %o1 |
| 369 | b 7f |
| 370 | add %g3, 1, %g3 |
| 371 | 2: ld [%o1 - 4], %o4 |
| 372 | add %o0, -4, %o0 |
| 373 | ld [%o1 - 8], %g1 |
| 374 | add %o1, -12, %o1 |
| 375 | b 8f |
| 376 | add %g3, 2, %g3 |
| 377 | 3: ld [%o1 - 4], %o5 |
| 378 | add %o0, -12, %o0 |
| 379 | ld [%o1 - 8], %o3 |
| 380 | add %o1, -20, %o1 |
| 381 | b 6f |
| 382 | srl %o2, 2, %g3 |
| 383 | 4: ld [%o1 - 4], %g1 |
| 384 | srl %o2, 2, %g3 |
| 385 | ld [%o1 - 8], %o5 |
| 386 | add %o1, -24, %o1 |
| 387 | add %o0, -16, %o0 |
| 388 | add %g3, -1, %g3 |
| 389 | |
| 390 | ld [%o1 + 12], %o3 |
| 391 | 5: sll %o5, %g4, %g2 |
| 392 | srl %g1, %g6, %g5 |
| 393 | or %g2, %g5, %g2 |
| 394 | st %g2, [%o0 + 12] |
| 395 | 6: ld [%o1 + 8], %o4 |
| 396 | sll %o3, %g4, %g2 |
| 397 | srl %o5, %g6, %g5 |
| 398 | or %g2, %g5, %g2 |
| 399 | st %g2, [%o0 + 8] |
| 400 | 7: ld [%o1 + 4], %g1 |
| 401 | sll %o4, %g4, %g2 |
| 402 | srl %o3, %g6, %g5 |
| 403 | or %g2, %g5, %g2 |
| 404 | st %g2, [%o0 + 4] |
| 405 | 8: ld [%o1], %o5 |
| 406 | sll %g1, %g4, %g2 |
| 407 | srl %o4, %g6, %g5 |
| 408 | addcc %g3, -4, %g3 |
| 409 | or %g2, %g5, %g2 |
| 410 | add %o1, -16, %o1 |
| 411 | st %g2, [%o0] |
| 412 | add %o0, -16, %o0 |
| 413 | bne,a 5b |
| 414 | ld [%o1 + 12], %o3 |
| 415 | sll %o5, %g4, %g2 |
| 416 | srl %g1, %g6, %g5 |
| 417 | srl %g4, 3, %g3 |
| 418 | or %g2, %g5, %g2 |
| 419 | add %o1, %g3, %o1 |
| 420 | andcc %o2, 2, %g0 |
| 421 | st %g2, [%o0 + 12] |
| 422 | be 1f |
| 423 | andcc %o2, 1, %g0 |
| 424 | |
| 425 | ldub [%o1 + 15], %g5 |
| 426 | add %o1, -2, %o1 |
| 427 | stb %g5, [%o0 + 11] |
| 428 | add %o0, -2, %o0 |
| 429 | ldub [%o1 + 16], %g5 |
| 430 | stb %g5, [%o0 + 12] |
| 431 | 1: be 1f |
| 432 | nop |
| 433 | ldub [%o1 + 15], %g5 |
| 434 | stb %g5, [%o0 + 11] |
| 435 | 1: retl |
| 436 | ld [%sp + 64], %o0 |
| 437 | |
| 438 | 78: andcc %o1, 1, %g0 |
| 439 | be 4f |
| 440 | andcc %o1, 2, %g0 |
| 441 | |
| 442 | ldub [%o1], %g2 |
| 443 | add %o1, 1, %o1 |
| 444 | stb %g2, [%o0] |
| 445 | sub %o2, 1, %o2 |
| 446 | bne 3f |
| 447 | add %o0, 1, %o0 |
| 448 | 4: lduh [%o1], %g2 |
| 449 | add %o1, 2, %o1 |
| 450 | sth %g2, [%o0] |
| 451 | sub %o2, 2, %o2 |
| 452 | b 3f |
| 453 | add %o0, 2, %o0 |
| 454 | END(memmove) |
| 455 | libc_hidden_def(memmove) |
| 456 | |
| 457 | ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */ |
| 458 | sub %o0, %o1, %o4 |
| 459 | st %o0, [%sp + 64] |
| 460 | 9: andcc %o4, 3, %o5 |
| 461 | 0: bne 86f |
| 462 | cmp %o2, 15 |
| 463 | |
| 464 | bleu 90f |
| 465 | andcc %o1, 3, %g0 |
| 466 | |
| 467 | bne 78b |
| 468 | 3: andcc %o1, 4, %g0 |
| 469 | |
| 470 | be 2f |
| 471 | mov %o2, %g1 |
| 472 | |
| 473 | ld [%o1], %o4 |
| 474 | sub %g1, 4, %g1 |
| 475 | st %o4, [%o0] |
| 476 | add %o1, 4, %o1 |
| 477 | add %o0, 4, %o0 |
| 478 | 2: andcc %g1, 0xffffff80, %g6 |
| 479 | be 3f |
| 480 | andcc %o0, 4, %g0 |
| 481 | |
| 482 | be 82f + 4 |
| 483 | 5: MOVE_BIGCHUNK(o1, o0, 0x00, o2, o3, o4, o5, g2, g3, g4, g5) |
| 484 | MOVE_BIGCHUNK(o1, o0, 0x20, o2, o3, o4, o5, g2, g3, g4, g5) |
| 485 | MOVE_BIGCHUNK(o1, o0, 0x40, o2, o3, o4, o5, g2, g3, g4, g5) |
| 486 | MOVE_BIGCHUNK(o1, o0, 0x60, o2, o3, o4, o5, g2, g3, g4, g5) |
| 487 | subcc %g6, 128, %g6 |
| 488 | add %o1, 128, %o1 |
| 489 | bne 5b |
| 490 | add %o0, 128, %o0 |
| 491 | 3: andcc %g1, 0x70, %g6 |
| 492 | be 80f |
| 493 | andcc %g1, 8, %g0 |
| 494 | |
| 495 | srl %g6, 1, %o4 |
| 496 | mov %o7, %g2 |
| 497 | add %g6, %o4, %o4 |
| 498 | add %o1, %g6, %o1 |
| 499 | 104: call 100f |
| 500 | add %o0, %g6, %o0 |
| 501 | jmpl %o5 + (80f - 104b), %g0 |
| 502 | mov %g2, %o7 |
| 503 | |
| 504 | 79: MOVE_LASTCHUNK(o1, o0, 0x60, g2, g3, g4, g5) |
| 505 | MOVE_LASTCHUNK(o1, o0, 0x50, g2, g3, g4, g5) |
| 506 | MOVE_LASTCHUNK(o1, o0, 0x40, g2, g3, g4, g5) |
| 507 | MOVE_LASTCHUNK(o1, o0, 0x30, g2, g3, g4, g5) |
| 508 | MOVE_LASTCHUNK(o1, o0, 0x20, g2, g3, g4, g5) |
| 509 | MOVE_LASTCHUNK(o1, o0, 0x10, g2, g3, g4, g5) |
| 510 | MOVE_LASTCHUNK(o1, o0, 0x00, g2, g3, g4, g5) |
| 511 | |
| 512 | 80: be 81f |
| 513 | andcc %g1, 4, %g0 |
| 514 | |
| 515 | ldd [%o1], %g2 |
| 516 | add %o0, 8, %o0 |
| 517 | st %g2, [%o0 - 0x08] |
| 518 | add %o1, 8, %o1 |
| 519 | st %g3, [%o0 - 0x04] |
| 520 | |
| 521 | 81: be 1f |
| 522 | andcc %g1, 2, %g0 |
| 523 | |
| 524 | ld [%o1], %g2 |
| 525 | add %o1, 4, %o1 |
| 526 | st %g2, [%o0] |
| 527 | add %o0, 4, %o0 |
| 528 | 1: be 1f |
| 529 | andcc %g1, 1, %g0 |
| 530 | |
| 531 | lduh [%o1], %g2 |
| 532 | add %o1, 2, %o1 |
| 533 | sth %g2, [%o0] |
| 534 | add %o0, 2, %o0 |
| 535 | 1: be 1f |
| 536 | nop |
| 537 | |
| 538 | ldub [%o1], %g2 |
| 539 | stb %g2, [%o0] |
| 540 | 1: retl |
| 541 | ld [%sp + 64], %o0 |
| 542 | |
| 543 | 82: /* ldd_std */ |
| 544 | MOVE_BIGALIGNCHUNK(o1, o0, 0x00, o2, o3, o4, o5, g2, g3, g4, g5) |
| 545 | MOVE_BIGALIGNCHUNK(o1, o0, 0x20, o2, o3, o4, o5, g2, g3, g4, g5) |
| 546 | MOVE_BIGALIGNCHUNK(o1, o0, 0x40, o2, o3, o4, o5, g2, g3, g4, g5) |
| 547 | MOVE_BIGALIGNCHUNK(o1, o0, 0x60, o2, o3, o4, o5, g2, g3, g4, g5) |
| 548 | subcc %g6, 128, %g6 |
| 549 | add %o1, 128, %o1 |
| 550 | bne 82b |
| 551 | add %o0, 128, %o0 |
| 552 | |
| 553 | andcc %g1, 0x70, %g6 |
| 554 | be 84f |
| 555 | andcc %g1, 8, %g0 |
| 556 | |
| 557 | mov %o7, %g2 |
| 558 | 111: call 110f |
| 559 | add %o1, %g6, %o1 |
| 560 | mov %g2, %o7 |
| 561 | jmpl %o5 + (84f - 111b), %g0 |
| 562 | add %o0, %g6, %o0 |
| 563 | |
| 564 | 83: MOVE_LASTALIGNCHUNK(o1, o0, 0x60, g2, g3, g4, g5) |
| 565 | MOVE_LASTALIGNCHUNK(o1, o0, 0x50, g2, g3, g4, g5) |
| 566 | MOVE_LASTALIGNCHUNK(o1, o0, 0x40, g2, g3, g4, g5) |
| 567 | MOVE_LASTALIGNCHUNK(o1, o0, 0x30, g2, g3, g4, g5) |
| 568 | MOVE_LASTALIGNCHUNK(o1, o0, 0x20, g2, g3, g4, g5) |
| 569 | MOVE_LASTALIGNCHUNK(o1, o0, 0x10, g2, g3, g4, g5) |
| 570 | MOVE_LASTALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5) |
| 571 | |
| 572 | 84: be 85f |
| 573 | andcc %g1, 4, %g0 |
| 574 | |
| 575 | ldd [%o1], %g2 |
| 576 | add %o0, 8, %o0 |
| 577 | std %g2, [%o0 - 0x08] |
| 578 | add %o1, 8, %o1 |
| 579 | 85: be 1f |
| 580 | andcc %g1, 2, %g0 |
| 581 | |
| 582 | ld [%o1], %g2 |
| 583 | add %o1, 4, %o1 |
| 584 | st %g2, [%o0] |
| 585 | add %o0, 4, %o0 |
| 586 | 1: be 1f |
| 587 | andcc %g1, 1, %g0 |
| 588 | |
| 589 | lduh [%o1], %g2 |
| 590 | add %o1, 2, %o1 |
| 591 | sth %g2, [%o0] |
| 592 | add %o0, 2, %o0 |
| 593 | 1: be 1f |
| 594 | nop |
| 595 | |
| 596 | ldub [%o1], %g2 |
| 597 | stb %g2, [%o0] |
| 598 | 1: retl |
| 599 | ld [%sp + 64], %o0 |
| 600 | |
| 601 | 86: cmp %o2, 6 |
| 602 | bleu 88f |
| 603 | |
| 604 | cmp %o2, 256 |
| 605 | bcc 87f |
| 606 | |
| 607 | andcc %o0, 3, %g0 |
| 608 | be 61f |
| 609 | andcc %o0, 1, %g0 |
| 610 | be 60f |
| 611 | andcc %o0, 2, %g0 |
| 612 | |
| 613 | ldub [%o1], %g5 |
| 614 | add %o1, 1, %o1 |
| 615 | stb %g5, [%o0] |
| 616 | sub %o2, 1, %o2 |
| 617 | bne 61f |
| 618 | add %o0, 1, %o0 |
| 619 | 60: ldub [%o1], %g3 |
| 620 | add %o1, 2, %o1 |
| 621 | stb %g3, [%o0] |
| 622 | sub %o2, 2, %o2 |
| 623 | ldub [%o1 - 1], %g3 |
| 624 | add %o0, 2, %o0 |
| 625 | stb %g3, [%o0 - 1] |
| 626 | 61: and %o1, 3, %g2 |
| 627 | and %o2, 0xc, %g3 |
| 628 | and %o1, -4, %o1 |
| 629 | cmp %g3, 4 |
| 630 | sll %g2, 3, %g4 |
| 631 | mov 32, %g2 |
| 632 | be 4f |
| 633 | sub %g2, %g4, %g6 |
| 634 | |
| 635 | blu 3f |
| 636 | cmp %g3, 0x8 |
| 637 | |
| 638 | be 2f |
| 639 | srl %o2, 2, %g3 |
| 640 | |
| 641 | ld [%o1], %o3 |
| 642 | add %o0, -8, %o0 |
| 643 | ld [%o1 + 4], %o4 |
| 644 | b 8f |
| 645 | add %g3, 1, %g3 |
| 646 | 2: ld [%o1], %o4 |
| 647 | add %o0, -12, %o0 |
| 648 | ld [%o1 + 4], %o5 |
| 649 | add %g3, 2, %g3 |
| 650 | b 9f |
| 651 | add %o1, -4, %o1 |
| 652 | 3: ld [%o1], %g1 |
| 653 | add %o0, -4, %o0 |
| 654 | ld [%o1 + 4], %o3 |
| 655 | srl %o2, 2, %g3 |
| 656 | b 7f |
| 657 | add %o1, 4, %o1 |
| 658 | 4: ld [%o1], %o5 |
| 659 | cmp %o2, 7 |
| 660 | ld [%o1 + 4], %g1 |
| 661 | srl %o2, 2, %g3 |
| 662 | bleu 10f |
| 663 | add %o1, 8, %o1 |
| 664 | |
| 665 | ld [%o1], %o3 |
| 666 | add %g3, -1, %g3 |
| 667 | 5: sll %o5, %g4, %g2 |
| 668 | srl %g1, %g6, %g5 |
| 669 | or %g2, %g5, %g2 |
| 670 | st %g2, [%o0] |
| 671 | 7: ld [%o1 + 4], %o4 |
| 672 | sll %g1, %g4, %g2 |
| 673 | srl %o3, %g6, %g5 |
| 674 | or %g2, %g5, %g2 |
| 675 | st %g2, [%o0 + 4] |
| 676 | 8: ld [%o1 + 8], %o5 |
| 677 | sll %o3, %g4, %g2 |
| 678 | srl %o4, %g6, %g5 |
| 679 | or %g2, %g5, %g2 |
| 680 | st %g2, [%o0 + 8] |
| 681 | 9: ld [%o1 + 12], %g1 |
| 682 | sll %o4, %g4, %g2 |
| 683 | srl %o5, %g6, %g5 |
| 684 | addcc %g3, -4, %g3 |
| 685 | or %g2, %g5, %g2 |
| 686 | add %o1, 16, %o1 |
| 687 | st %g2, [%o0 + 12] |
| 688 | add %o0, 16, %o0 |
| 689 | bne,a 5b |
| 690 | ld [%o1], %o3 |
| 691 | 10: sll %o5, %g4, %g2 |
| 692 | srl %g1, %g6, %g5 |
| 693 | srl %g6, 3, %g3 |
| 694 | or %g2, %g5, %g2 |
| 695 | sub %o1, %g3, %o1 |
| 696 | andcc %o2, 2, %g0 |
| 697 | st %g2, [%o0] |
| 698 | be 1f |
| 699 | andcc %o2, 1, %g0 |
| 700 | |
| 701 | ldub [%o1], %g2 |
| 702 | add %o1, 2, %o1 |
| 703 | stb %g2, [%o0 + 4] |
| 704 | add %o0, 2, %o0 |
| 705 | ldub [%o1 - 1], %g2 |
| 706 | stb %g2, [%o0 + 3] |
| 707 | 1: be 1f |
| 708 | nop |
| 709 | ldub [%o1], %g2 |
| 710 | stb %g2, [%o0 + 4] |
| 711 | 1: retl |
| 712 | ld [%sp + 64], %o0 |
| 713 | |
| 714 | 87: andcc %o1, 3, %g0 |
| 715 | be 3f |
| 716 | andcc %o1, 1, %g0 |
| 717 | |
| 718 | be 4f |
| 719 | andcc %o1, 2, %g0 |
| 720 | |
| 721 | ldub [%o1], %g2 |
| 722 | add %o1, 1, %o1 |
| 723 | stb %g2, [%o0] |
| 724 | sub %o2, 1, %o2 |
| 725 | bne 3f |
| 726 | add %o0, 1, %o0 |
| 727 | 4: lduh [%o1], %g2 |
| 728 | add %o1, 2, %o1 |
| 729 | srl %g2, 8, %g3 |
| 730 | sub %o2, 2, %o2 |
| 731 | stb %g3, [%o0] |
| 732 | add %o0, 2, %o0 |
| 733 | stb %g2, [%o0 - 1] |
| 734 | 3: andcc %o1, 4, %g0 |
| 735 | |
| 736 | bne 2f |
| 737 | cmp %o5, 1 |
| 738 | |
| 739 | ld [%o1], %o4 |
| 740 | srl %o4, 24, %g2 |
| 741 | stb %g2, [%o0] |
| 742 | srl %o4, 16, %g3 |
| 743 | stb %g3, [%o0 + 1] |
| 744 | srl %o4, 8, %g2 |
| 745 | stb %g2, [%o0 + 2] |
| 746 | sub %o2, 4, %o2 |
| 747 | stb %o4, [%o0 + 3] |
| 748 | add %o1, 4, %o1 |
| 749 | add %o0, 4, %o0 |
| 750 | 2: be 33f |
| 751 | cmp %o5, 2 |
| 752 | be 32f |
| 753 | sub %o2, 4, %o2 |
| 754 | 31: ld [%o1], %g2 |
| 755 | add %o1, 4, %o1 |
| 756 | srl %g2, 24, %g3 |
| 757 | and %o0, 7, %g5 |
| 758 | stb %g3, [%o0] |
| 759 | cmp %g5, 7 |
| 760 | sll %g2, 8, %g1 |
| 761 | add %o0, 4, %o0 |
| 762 | be 41f |
| 763 | and %o2, 0xffffffc0, %o3 |
| 764 | ld [%o0 - 7], %o4 |
| 765 | 4: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) |
| 766 | SMOVE_CHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) |
| 767 | SMOVE_CHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) |
| 768 | SMOVE_CHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) |
| 769 | subcc %o3, 64, %o3 |
| 770 | add %o1, 64, %o1 |
| 771 | bne 4b |
| 772 | add %o0, 64, %o0 |
| 773 | |
| 774 | andcc %o2, 0x30, %o3 |
| 775 | be,a 1f |
| 776 | srl %g1, 16, %g2 |
| 777 | 4: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) |
| 778 | subcc %o3, 16, %o3 |
| 779 | add %o1, 16, %o1 |
| 780 | bne 4b |
| 781 | add %o0, 16, %o0 |
| 782 | |
| 783 | srl %g1, 16, %g2 |
| 784 | 1: st %o4, [%o0 - 7] |
| 785 | sth %g2, [%o0 - 3] |
| 786 | srl %g1, 8, %g4 |
| 787 | b 88f |
| 788 | stb %g4, [%o0 - 1] |
| 789 | 32: ld [%o1], %g2 |
| 790 | add %o1, 4, %o1 |
| 791 | srl %g2, 16, %g3 |
| 792 | and %o0, 7, %g5 |
| 793 | sth %g3, [%o0] |
| 794 | cmp %g5, 6 |
| 795 | sll %g2, 16, %g1 |
| 796 | add %o0, 4, %o0 |
| 797 | be 42f |
| 798 | and %o2, 0xffffffc0, %o3 |
| 799 | ld [%o0 - 6], %o4 |
| 800 | 4: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) |
| 801 | SMOVE_CHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) |
| 802 | SMOVE_CHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) |
| 803 | SMOVE_CHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) |
| 804 | subcc %o3, 64, %o3 |
| 805 | add %o1, 64, %o1 |
| 806 | bne 4b |
| 807 | add %o0, 64, %o0 |
| 808 | |
| 809 | andcc %o2, 0x30, %o3 |
| 810 | be,a 1f |
| 811 | srl %g1, 16, %g2 |
| 812 | 4: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) |
| 813 | subcc %o3, 16, %o3 |
| 814 | add %o1, 16, %o1 |
| 815 | bne 4b |
| 816 | add %o0, 16, %o0 |
| 817 | |
| 818 | srl %g1, 16, %g2 |
| 819 | 1: st %o4, [%o0 - 6] |
| 820 | b 88f |
| 821 | sth %g2, [%o0 - 2] |
| 822 | 33: ld [%o1], %g2 |
| 823 | sub %o2, 4, %o2 |
| 824 | srl %g2, 24, %g3 |
| 825 | and %o0, 7, %g5 |
| 826 | stb %g3, [%o0] |
| 827 | cmp %g5, 5 |
| 828 | srl %g2, 8, %g4 |
| 829 | sll %g2, 24, %g1 |
| 830 | sth %g4, [%o0 + 1] |
| 831 | add %o1, 4, %o1 |
| 832 | be 43f |
| 833 | and %o2, 0xffffffc0, %o3 |
| 834 | |
| 835 | ld [%o0 - 1], %o4 |
| 836 | add %o0, 4, %o0 |
| 837 | 4: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, -1) |
| 838 | SMOVE_CHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, -1) |
| 839 | SMOVE_CHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, -1) |
| 840 | SMOVE_CHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, -1) |
| 841 | subcc %o3, 64, %o3 |
| 842 | add %o1, 64, %o1 |
| 843 | bne 4b |
| 844 | add %o0, 64, %o0 |
| 845 | |
| 846 | andcc %o2, 0x30, %o3 |
| 847 | be,a 1f |
| 848 | srl %g1, 24, %g2 |
| 849 | 4: SMOVE_CHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, -1) |
| 850 | subcc %o3, 16, %o3 |
| 851 | add %o1, 16, %o1 |
| 852 | bne 4b |
| 853 | add %o0, 16, %o0 |
| 854 | |
| 855 | srl %g1, 24, %g2 |
| 856 | 1: st %o4, [%o0 - 5] |
| 857 | b 88f |
| 858 | stb %g2, [%o0 - 1] |
| 859 | 41: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) |
| 860 | SMOVE_ALIGNCHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) |
| 861 | SMOVE_ALIGNCHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) |
| 862 | SMOVE_ALIGNCHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) |
| 863 | subcc %o3, 64, %o3 |
| 864 | add %o1, 64, %o1 |
| 865 | bne 41b |
| 866 | add %o0, 64, %o0 |
| 867 | |
| 868 | andcc %o2, 0x30, %o3 |
| 869 | be,a 1f |
| 870 | srl %g1, 16, %g2 |
| 871 | 4: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 8, 24, -3) |
| 872 | subcc %o3, 16, %o3 |
| 873 | add %o1, 16, %o1 |
| 874 | bne 4b |
| 875 | add %o0, 16, %o0 |
| 876 | |
| 877 | srl %g1, 16, %g2 |
| 878 | 1: sth %g2, [%o0 - 3] |
| 879 | srl %g1, 8, %g4 |
| 880 | b 88f |
| 881 | stb %g4, [%o0 - 1] |
| 882 | 43: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, 3) |
| 883 | SMOVE_ALIGNCHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, 3) |
| 884 | SMOVE_ALIGNCHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, 3) |
| 885 | SMOVE_ALIGNCHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, 3) |
| 886 | subcc %o3, 64, %o3 |
| 887 | add %o1, 64, %o1 |
| 888 | bne 43b |
| 889 | add %o0, 64, %o0 |
| 890 | |
| 891 | andcc %o2, 0x30, %o3 |
| 892 | be,a 1f |
| 893 | srl %g1, 24, %g2 |
| 894 | 4: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 24, 8, 3) |
| 895 | subcc %o3, 16, %o3 |
| 896 | add %o1, 16, %o1 |
| 897 | bne 4b |
| 898 | add %o0, 16, %o0 |
| 899 | |
| 900 | srl %g1, 24, %g2 |
| 901 | 1: stb %g2, [%o0 + 3] |
| 902 | b 88f |
| 903 | add %o0, 4, %o0 |
| 904 | 42: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) |
| 905 | SMOVE_ALIGNCHUNK(o1, o0, 0x10, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) |
| 906 | SMOVE_ALIGNCHUNK(o1, o0, 0x20, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) |
| 907 | SMOVE_ALIGNCHUNK(o1, o0, 0x30, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) |
| 908 | subcc %o3, 64, %o3 |
| 909 | add %o1, 64, %o1 |
| 910 | bne 42b |
| 911 | add %o0, 64, %o0 |
| 912 | |
| 913 | andcc %o2, 0x30, %o3 |
| 914 | be,a 1f |
| 915 | srl %g1, 16, %g2 |
| 916 | 4: SMOVE_ALIGNCHUNK(o1, o0, 0x00, g2, g3, g4, g5, o4, o5, g6, g1, 16, 16, -2) |
| 917 | subcc %o3, 16, %o3 |
| 918 | add %o1, 16, %o1 |
| 919 | bne 4b |
| 920 | add %o0, 16, %o0 |
| 921 | |
| 922 | srl %g1, 16, %g2 |
| 923 | 1: sth %g2, [%o0 - 2] |
| 924 | |
| 925 | /* Fall through */ |
| 926 | |
| 927 | 88: and %o2, 0xe, %o3 |
| 928 | mov %o7, %g2 |
| 929 | sll %o3, 3, %o4 |
| 930 | add %o0, %o3, %o0 |
| 931 | 106: call 100f |
| 932 | add %o1, %o3, %o1 |
| 933 | mov %g2, %o7 |
| 934 | jmpl %o5 + (89f - 106b), %g0 |
| 935 | andcc %o2, 1, %g0 |
| 936 | |
| 937 | MOVE_SHORTCHUNK(o1, o0, 0x0c, g2, g3) |
| 938 | MOVE_SHORTCHUNK(o1, o0, 0x0a, g2, g3) |
| 939 | MOVE_SHORTCHUNK(o1, o0, 0x08, g2, g3) |
| 940 | MOVE_SHORTCHUNK(o1, o0, 0x06, g2, g3) |
| 941 | MOVE_SHORTCHUNK(o1, o0, 0x04, g2, g3) |
| 942 | MOVE_SHORTCHUNK(o1, o0, 0x02, g2, g3) |
| 943 | MOVE_SHORTCHUNK(o1, o0, 0x00, g2, g3) |
| 944 | |
| 945 | 89: be 1f |
| 946 | nop |
| 947 | |
| 948 | ldub [%o1], %g2 |
| 949 | stb %g2, [%o0] |
| 950 | 1: retl |
| 951 | ld [%sp + 64], %o0 |
| 952 | |
| 953 | 90: bne 88b |
| 954 | andcc %o2, 8, %g0 |
| 955 | |
| 956 | be 1f |
| 957 | andcc %o2, 4, %g0 |
| 958 | |
| 959 | ld [%o1 + 0x00], %g2 |
| 960 | ld [%o1 + 0x04], %g3 |
| 961 | add %o1, 8, %o1 |
| 962 | st %g2, [%o0 + 0x00] |
| 963 | st %g3, [%o0 + 0x04] |
| 964 | add %o0, 8, %o0 |
| 965 | 1: b 81b |
| 966 | mov %o2, %g1 |
| 967 | |
| 968 | 100: retl |
| 969 | sub %o7, %o4, %o5 |
| 970 | 110: retl |
| 971 | sub %o7, %g6, %o5 |
| 972 | END(memcpy) |
| 973 | libc_hidden_def(memcpy) |