1/* $NetBSD: pio_subr.S,v 1.3 2003/04/30 19:14:44 scw Exp $ */ 2 3/* 4 * Copyright (c) 2003 Matt Thomas 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 3. The name of the author may not be used to endorse or promote products 15 * derived from this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 18 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 * 29 */ 30/* 31 * Assembly note: 32 * We use rotlw instead of slw because rotlw ignores bit 26 and slw 33 * doesn't. However, this may make the high bits of the offset rotate 34 * in the low bits but if that happens then the offset was too large 35 * to being with. 36 */ 37#ifdef DEBUG 38#define DBGSYNC sync 39#else 40#define DBGSYNC /* nothing */ 41#endif 42/* LINTSTUB: include <sys/param.h> */ 43/* LINTSTUB: include <sys/types.h> */ 44/* LINTSTUB: include <machine/bus.h> */ 45 46/* LINTSTUB: Func: void out8(volatile u_int8_t *a, u_int8_t v) */ 47 48ENTRY_NOPROFILE(out8) 49 stbx 4,0,3 50 eieio /* memory barrier (reorder protection) */ 51 DBGSYNC /* force exceptions */ 52 blr /* return */ 53 54/* LINTSTUB: Func: void bsw1_s(bus_space_tag_t t, bus_addr_t h, bus_size_t o, u_int8_t v) */ 55/* LINTSTUB: Func: void bsw1(bus_space_tag_t t, bus_addr_t h, bus_size_t o, u_int8_t v) */ 56 57ENTRY_NOPROFILE(bsw1_s) 58 lwz 0,0(3) /* get log2(stride) */ 59 rotlw 5,5,0 /* shift offset */ 60ENTRY_NOPROFILE(bsw1) 61 stbx 6,4,5 /* store value */ 62 eieio /* memory barrier (reorder protection) */ 63 DBGSYNC /* force exceptions */ 64 blr /* return */ 65 66/* LINTSTUB: Func: void out16(volatile u_int16_t *a, u_int16_t v) */ 67 68ENTRY_NOPROFILE(out16) 69 sth 4,0(3) 70 eieio /* memory barrier (reorder protection) */ 71 DBGSYNC /* force exceptions */ 72 blr /* return */ 73 74/* LINTSTUB: Func: void bsw2_s(bus_space_tag_t t, bus_addr_t h, bus_size_t o, u_int16_t v) */ 75/* LINTSTUB: Func: void bsw2(bus_space_tag_t t, bus_addr_t h, bus_size_t o, u_int16_t v) */ 76 77ENTRY_NOPROFILE(bsw2_s) 78 lwz 0,0(3) /* get log2(stride) */ 79 rotlw 5,5,0 /* shift offset */ 80ENTRY_NOPROFILE(bsw2) 81 sthx 6,4,5 /* store value */ 82 eieio /* memory barrier (reorder protection) */ 83 DBGSYNC /* force exceptions */ 84 blr /* return */ 85 86/* LINTSTUB: Func: void out32(volatile u_int32_t *a, u_int32_t v) */ 87 88ENTRY_NOPROFILE(out32) 89 stw 4,0(3) 90 eieio /* memory barrier (reorder protection) */ 91 DBGSYNC /* force exceptions */ 92 blr /* return */ 93 94/* LINTSTUB: Func: void bsw4_s(bus_space_tag_t t, bus_addr_t h, bus_size_t o, u_int32_t v) */ 95/* LINTSTUB: Func: void bsw4(bus_space_tag_t t, bus_addr_t h, bus_size_t o, u_int32_t v) */ 96 97ENTRY_NOPROFILE(bsw4_s) 98 lwz 0,0(3) /* get log2(stride) */ 99 rotlw 5,5,0 /* shift offset */ 100ENTRY_NOPROFILE(bsw4) 101 stwx 6,4,5 /* store value */ 102 eieio /* memory barrier (reorder protection) */ 103 DBGSYNC /* force exceptions */ 104 blr /* return */ 105 106/* LINTSTUB: Func: void bsw8_s(bus_space_tag_t t, bus_addr_t h, bus_size_t o, u_int64_t v) */ 107/* LINTSTUB: Func: void bsw8(bus_space_tag_t t, bus_addr_t h, bus_size_t o, u_int64_t v) */ 108ENTRY_NOPROFILE(bsw8_s) 109 lwz 0,0(3) /* get log2(stride) */ 110 rotlw 5,5,0 /* shift offset */ 111ENTRY_NOPROFILE(bsw8) 112#ifdef __ARCH64__ 113 stdx 6,4,5 /* store value */ 114#else 115 trap /* die */ 116#endif 117 eieio /* memory barrier (reorder protection) */ 118 DBGSYNC /* force exceptions */ 119 blr /* return */ 120 121/* LINTSTUB: Func: void out16rb(volatile u_int16_t *a, u_int16_t v) */ 122 123ENTRY_NOPROFILE(out16rb) 124 sthbrx 4,0,3 125 eieio /* memory barrier (reorder protection) */ 126 DBGSYNC /* force exceptions */ 127 blr /* return */ 128 129/* LINTSTUB: Func: void bsw2rb_s(bus_space_tag_t t, bus_addr_t h, bus_size_t o, u_int16_t v) */ 130/* LINTSTUB: Func: void bsw2rb(bus_space_tag_t t, bus_addr_t h, bus_size_t o, u_int16_t v) */ 131 132 133ENTRY_NOPROFILE(bsw2rb_s) 134 lwz 0,0(3) /* get log2(stride) */ 135 rotlw 5,5,0 /* shift offset */ 136ENTRY_NOPROFILE(bsw2rb) 137 sthbrx 6,4,5 /* store value */ 138 eieio /* memory barrier (reorder protection) */ 139 DBGSYNC /* force exceptions */ 140 blr /* return */ 141 142/* LINTSTUB: Func: void out32rb(volatile u_int32_t *a, u_int32_t v) */ 143 144ENTRY_NOPROFILE(out32rb) 145 stwbrx 4,0,3 146 eieio /* memory barrier (reorder protection) */ 147 DBGSYNC /* force exceptions */ 148 blr /* return */ 149 150/* LINTSTUB: Func: void bsw4rb_s(bus_space_tag_t t, bus_addr_t h, bus_size_t o, u_int32_t v) */ 151/* LINTSTUB: Func: void bsw4rb(bus_space_tag_t t, bus_addr_t h, bus_size_t o, u_int32_t v) */ 152 153ENTRY_NOPROFILE(bsw4rb_s) 154 lwz 0,0(3) /* get log2(stride) */ 155 rotlw 5,5,0 /* shift offset */ 156ENTRY_NOPROFILE(bsw4rb) 157 stwbrx 6,4,5 /* store value */ 158 eieio /* memory barrier (reorder protection) */ 159 DBGSYNC /* force exceptions */ 160 blr /* return */ 161 162/* LINTSTUB: Func: void bsw8rb_s(bus_space_tag_t t, bus_addr_t h, bus_size_t o, u_int32_t v) */ 163/* LINTSTUB: Func: void bsw8rb(bus_space_tag_t t, bus_addr_t h, bus_size_t o, u_int32_t v) */ 164 165ENTRY_NOPROFILE(bsw8rb_s) 166 lwz 0,0(3) /* get log2(stride) */ 167 rotlw 5,5,0 /* shift offset */ 168ENTRY_NOPROFILE(bsw8rb) 169#ifdef __ARCH64__ 170 stdbrx 6,4,5 /* store value */ 171#else 172 trap /* die */ 173#endif 174 eieio /* memory barrier (reorder protection) */ 175 DBGSYNC /* force exceptions */ 176 blr /* return */ 177 178/* LINTSTUB: Func: int in8(const volatile u_int8_t *a) */ 179 180ENTRY_NOPROFILE(in8) 181 lbz 3,0(3) 182 eieio /* memory barrier (reorder protection) */ 183 DBGSYNC /* force exceptions */ 184 blr /* return */ 185 186/* LINTSTUB: Func: int bsr1_s(bus_space_tag_t t, bus_addr_t h, bus_size_t o) */ 187/* LINTSTUB: Func: int bsr1(bus_space_tag_t t, bus_addr_t h, bus_size_t o) */ 188 189ENTRY_NOPROFILE(bsr1_s) 190 lwz 0,0(3) /* get log2(stride) */ 191 rotlw 5,5,0 /* shift offset */ 192ENTRY_NOPROFILE(bsr1) 193 lbzx 3,4,5 /* load value */ 194 eieio /* memory barrier (reorder protection) */ 195 DBGSYNC /* force exceptions */ 196 blr /* return */ 197 198/* LINTSTUB: Func: int in16(const volatile u_int16_t *a) */ 199 200ENTRY_NOPROFILE(in16) 201 lhz 3,0(3) 202 eieio /* memory barrier (reorder protection) */ 203 DBGSYNC /* force exceptions */ 204 blr /* return */ 205 206/* LINTSTUB: Func: int bsr2_s(bus_space_tag_t t, bus_addr_t h, bus_size_t o) */ 207/* LINTSTUB: Func: int bsr2(bus_space_tag_t t, bus_addr_t h, bus_size_t o) */ 208 209ENTRY_NOPROFILE(bsr2_s) 210 lwz 0,0(3) /* get log2(stride) */ 211 rotlw 5,5,0 /* shift offset */ 212ENTRY_NOPROFILE(bsr2) 213 lhzx 3,4,5 /* load value */ 214 eieio /* memory barrier (reorder protection) */ 215 DBGSYNC /* force exceptions */ 216 blr /* return */ 217 218/* LINTSTUB: Func: int in32(const volatile u_int32_t *a) */ 219 220ENTRY_NOPROFILE(in32) 221 lwz 3,0(3) 222 eieio /* memory barrier (reorder protection) */ 223 DBGSYNC /* force exceptions */ 224 blr /* return */ 225 226/* LINTSTUB: Func: int bsr4_s(bus_space_tag_t t, bus_addr_t h, bus_size_t o) */ 227/* LINTSTUB: Func: int bsr4(bus_space_tag_t t, bus_addr_t h, bus_size_t o) */ 228 229ENTRY_NOPROFILE(bsr4_s) 230 lwz 0,0(3) /* get log2(stride) */ 231 rotlw 5,5,0 /* shift offset */ 232ENTRY_NOPROFILE(bsr4) 233 lwzx 3,4,5 /* load value */ 234 eieio /* memory barrier (reorder protection) */ 235 DBGSYNC /* force exceptions */ 236 blr /* return */ 237 238/* LINTSTUB: Func: int bsr8_s(bus_space_tag_t t, bus_addr_t h, bus_size_t o) */ 239/* LINTSTUB: Func: int bsr8(bus_space_tag_t t, bus_addr_t h, bus_size_t o) */ 240 241ENTRY_NOPROFILE(bsr8_s) 242 lwz 0,0(3) /* get log2(stride) */ 243 rotlw 5,5,0 /* shift offset */ 244ENTRY_NOPROFILE(bsr8) 245#ifdef __ARCH64__ 246 lwdx 3,4,5 /* load value */ 247#else 248 trap 249#endif 250 eieio /* memory barrier (reorder protection) */ 251 DBGSYNC /* force exceptions */ 252 blr /* return */ 253 254/* LINTSTUB: Func: int in16rb(const volatile u_int16_t *a) */ 255 256ENTRY_NOPROFILE(in16rb) 257 lhbrx 3,0,3 258 eieio /* memory barrier (reorder protection) */ 259 DBGSYNC /* force exceptions */ 260 blr /* return */ 261 262/* LINTSTUB: Func: int bsr2rb_s(bus_space_tag_t t, bus_addr_t h, bus_size_t o) */ 263/* LINTSTUB: Func: int bsr2rb(bus_space_tag_t t, bus_addr_t h, bus_size_t o) */ 264 265ENTRY_NOPROFILE(bsr2rb_s) 266 lwz 0,0(3) /* get log2(stride) */ 267 rotlw 5,5,0 /* shift offset */ 268ENTRY_NOPROFILE(bsr2rb) 269 lhbrx 3,4,5 /* load value */ 270 eieio /* memory barrier (reorder protection) */ 271 DBGSYNC /* force exceptions */ 272 blr /* return */ 273 274/* LINTSTUB: Func: int in32rb(const volatile u_int32_t *a) */ 275 276ENTRY_NOPROFILE(in32rb) 277 lwbrx 3,0,3 278 eieio /* memory barrier (reorder protection) */ 279 DBGSYNC /* force exceptions */ 280 blr /* return */ 281 282/* LINTSTUB: Func: int bsr4rb_s(bus_space_tag_t t, bus_addr_t h, bus_size_t o) */ 283/* LINTSTUB: Func: int bsr4rb(bus_space_tag_t t, bus_addr_t h, bus_size_t o) */ 284 285ENTRY_NOPROFILE(bsr4rb_s) 286 lwz 0,0(3) /* get log2(stride) */ 287 rotlw 5,5,0 /* shift offset */ 288ENTRY_NOPROFILE(bsr4rb) 289 lwbrx 3,4,5 /* load value */ 290 eieio /* memory barrier (reorder protection) */ 291 DBGSYNC /* force exceptions */ 292 blr /* return */ 293 294/* LINTSTUB: Func: int bsr8rb_s(bus_space_tag_t t, bus_addr_t h, bus_size_t o) */ 295/* LINTSTUB: Func: int bsr8rb(bus_space_tag_t t, bus_addr_t h, bus_size_t o) */ 296 297ENTRY_NOPROFILE(bsr8rb_s) 298 lwz 0,0(3) /* get log2(stride) */ 299 rotlw 5,5,0 /* shift offset */ 300ENTRY_NOPROFILE(bsr8rb) 301#ifdef __ARCH64__ 302 ldbrx 3,4,5 /* load value */ 303#else 304 trap 305#endif 306 eieio /* memory barrier (reorder protection) */ 307 DBGSYNC /* force exceptions */ 308 blr /* return */ 309 310/* LINTSTUB: Func: void bswm1_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int8_t *addr, size_t len) */ 311/* LINTSTUB: Func: void bswm1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int8_t *addr, size_t len) */ 312/* LINTSTUB: Func: void outs8(volatile u_int8_t *dst, const u_int8_t *src, size_t len) */ 313 314ENTRY_NOPROFILE(bswm1_s) 315 lwz 0,0(3) /* get log2(stride) */ 316 rotlw 5,5,0 /* shift offset */ 317ENTRY_NOPROFILE(bswm1) 318 add 3,4,5 /* add offset to handle & place in argument 0 */ 319 mr 4,6 /* move addr to argument 1 register */ 320 mr 5,7 /* move count to argument 2 register */ 321ENTRY_NOPROFILE(outs8) 322 cmpwi 5,0 /* len == 0? */ 323 beqlr- /* return if len == 0 */ 324 addi 5,5,-1 /* len -= 1 */ 325 add 5,5,4 /* len += src */ 326 addi 4,4,-1 /* pre-decrement */ 3271: lbzu 0,1(4) /* load and increment */ 328 stb 0,0(3) /* store */ 329 cmpl 0,4,5 /* at the end? */ 330 bne+ 1b /* nope, do another pass */ 331 eieio /* memory barrier (reorder protection) */ 332 DBGSYNC /* force exceptions */ 333 blr /* return */ 334 335/* LINTSTUB: Func: void bswm2_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int16_t *addr, size_t len) */ 336/* LINTSTUB: Func: void bswm2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int16_t *addr, size_t len) */ 337/* LINTSTUB: Func: void outs16(volatile u_int16_t *dst, const u_int16_t *src, size_t len) */ 338 339ENTRY_NOPROFILE(bswm2_s) 340 lwz 0,0(3) /* get log2(stride) */ 341 rotlw 5,5,0 /* shift offset */ 342ENTRY_NOPROFILE(bswm2) 343 add 3,4,5 /* add offset to handle & place in argument 0 */ 344 mr 4,6 /* move addr to argument 1 register */ 345 mr 5,7 /* move count to argument 2 register */ 346ENTRY_NOPROFILE(outs16) 347 cmpwi 5,0 /* len == 0? */ 348 beqlr- /* return if len == 0 */ 349 addi 5,5,-1 /* len -= 1 */ 350 slwi 5,5,1 /* len *= 2 */ 351 add 5,5,4 /* len += src */ 352 addi 4,4,-2 /* pre-decrement */ 3531: lhzu 0,2(4) /* load and increment */ 354 sth 0,0(3) /* store */ 355 cmpl 0,4,5 /* at the end? */ 356 bne+ 1b /* nope, do another pass */ 357 eieio /* memory barrier (reorder protection) */ 358 DBGSYNC /* force exceptions */ 359 blr /* return */ 360 361/* LINTSTUB: Func: void bswm4_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int32_t *addr, size_t len) */ 362/* LINTSTUB: Func: void bswm4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int32_t *addr, size_t len) */ 363/* LINTSTUB: Func: void outs32(volatile u_int32_t *dst, const u_int32_t *src, size_t len) */ 364 365ENTRY_NOPROFILE(bswm4_s) 366 lwz 0,0(3) /* get log2(stride) */ 367 rotlw 5,5,0 /* shift offset */ 368ENTRY_NOPROFILE(bswm4) 369 add 3,4,5 /* add offset to handle & place in argument 0 */ 370 mr 4,6 /* move addr to argument 1 register */ 371 mr 5,7 /* move count to argument 2 register */ 372ENTRY_NOPROFILE(outs32) 373 cmpwi 5,0 /* len == 0? */ 374 beqlr- /* return if len == 0 */ 375 addi 5,5,-1 /* len -= 1 */ 376 slwi 5,5,2 /* len *= 4 */ 377 add 5,5,4 /* len += src */ 378 addi 4,4,-4 /* pre-decrement */ 3791: lwzu 0,4(4) /* load and increment */ 380 stw 0,0(3) /* store */ 381 cmpl 0,4,5 /* at the end? */ 382 bne+ 1b /* nope, do another pass */ 383 eieio /* memory barrier (reorder protection) */ 384 DBGSYNC /* force exceptions */ 385 blr /* return */ 386 387/* LINTSTUB: Func: void bswm8_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int64_t *addr, size_t len) */ 388/* LINTSTUB: Func: void bswm8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int64_t *addr, size_t len) */ 389 390#ifdef _LP64 391ENTRY_NOPROFILE(bswm8_s) 392 ld 0,0(3) /* get log2(stride) */ 393 rotld 5,5,0 /* shift offset */ 394ENTRY_NOPROFILE(bswm8) 395 add 3,4,5 /* add offset to handle & place in argument 0 */ 396 mr 4,6 /* move addr to argument 1 register */ 397 mr 5,7 /* move count to argument 2 register */ 398ENTRY_NOPROFILE(outs32) 399 cmpdi 5,0 /* len == 0? */ 400 beqlr- /* return if len == 0 */ 401 addi 5,5,-1 /* len -= 1 */ 402 sldi 5,5,2 /* len *= 4 */ 403 add 5,5,4 /* len += src */ 404 addi 4,4,-4 /* pre-decrement */ 4051: ldzu 0,4(4) /* load and increment */ 406 std 0,0(3) /* store */ 407 cmpl 0,4,5 /* at the end? */ 408 bne+ 1b /* nope, do another pass */ 409 eieio /* memory barrier (reorder protection) */ 410 DBGSYNC /* force exceptions */ 411 blr /* return */ 412#else 413ENTRY_NOPROFILE(bswm8_s) 414ENTRY_NOPROFILE(bswm8) 415 trap /* die */ 416#endif 417 418/* LINTSTUB: Func: void bswm2rb_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int16_t *addr, size_t len) */ 419/* LINTSTUB: Func: void bswm2rb(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int16_t *addr, size_t len) */ 420/* LINTSTUB: Func: void outs16rb(volatile u_int16_t *dst, const u_int16_t *src, size_t len) */ 421 422ENTRY_NOPROFILE(bswm2rb_s) 423 lwz 0,0(3) /* get log2(stride) */ 424 rotlw 5,5,0 /* shift offset */ 425ENTRY_NOPROFILE(bswm2rb) 426 add 3,4,5 /* add offset to handle & place in argument 0 */ 427 mr 4,6 /* move addr to argument 1 register */ 428 mr 5,7 /* move count to argument 2 register */ 429ENTRY_NOPROFILE(outs16rb) 430 cmpwi 5,0 /* len == 0? */ 431 beqlr- /* return if len == 0 */ 432 addi 5,5,-1 /* len -= 1 */ 433 slwi 5,5,1 /* len *= 2 */ 434 add 5,5,4 /* len += src */ 435 addi 4,4,-2 /* pre-decrement */ 4361: lwzu 0,2(4) /* load and increment */ 437 sthbrx 0,0,3 /* store (byte-reversed) */ 438 cmpl 0,4,5 /* at the end? */ 439 bne+ 1b /* nope, do another pass */ 440 eieio /* memory barrier (reorder protection) */ 441 DBGSYNC /* force exceptions */ 442 blr /* return */ 443 444/* LINTSTUB: Func: void bswm4rb_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int32_t *addr, size_t len) */ 445/* LINTSTUB: Func: void bswm4rb(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int32_t *addr, size_t len) */ 446/* LINTSTUB: Func: void outs32rb(volatile u_int32_t *dst, const u_int32_t *src, size_t len) */ 447 448ENTRY_NOPROFILE(bswm4rb_s) 449 lwz 0,0(3) /* get log2(stride) */ 450 rotlw 5,5,0 /* shift offset */ 451ENTRY_NOPROFILE(bswm4rb) 452 add 3,4,5 /* add offset to handle & place in argument 0 */ 453 mr 4,6 /* move addr to argument 1 register */ 454 mr 5,7 /* move count to argument 2 register */ 455ENTRY_NOPROFILE(outs32rb) 456 cmpwi 5,0 /* len == 0? */ 457 beqlr- /* return if len == 0 */ 458 addi 5,5,-1 /* len -= 1 */ 459 slwi 5,5,2 /* len *= 4 */ 460 add 5,5,4 /* len += src */ 461 addi 4,4,-4 /* pre-decrement */ 4621: lwzu 0,4(4) /* load and increment */ 463 stwbrx 0,0,3 /* store (byte-reversed) */ 464 cmpl 0,4,5 /* at the end? */ 465 bne+ 1b /* nope, do another pass */ 466 eieio /* memory barrier (reorder protection) */ 467 DBGSYNC /* force exceptions */ 468 blr /* return */ 469 470/* LINTSTUB: Func: void bswm8rb_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int32_t *addr, size_t len) */ 471/* LINTSTUB: Func: void bswm8rb(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int32_t *addr, size_t len) */ 472ENTRY_NOPROFILE(bswm8rb_s) 473ENTRY_NOPROFILE(bswm8rb) 474 trap 475 476/* LINTSTUB: Func: void bsrm1_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int8_t *addr, size_t len) */ 477/* LINTSTUB: Func: void bsrm1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int8_t *addr, size_t len) */ 478/* LINTSTUB: Func: void ins8(const volatile u_int8_t *src, u_int8_t *dst, size_t len) */ 479 480ENTRY_NOPROFILE(bsrm1_s) 481 lwz 0,0(3) /* get log2(stride) */ 482 rotlw 5,5,0 /* shift offset */ 483ENTRY_NOPROFILE(bsrm1) 484 add 3,4,5 /* add offset to handle & place in argument 0 */ 485 mr 4,6 /* move addr to argument 1 register */ 486 mr 5,7 /* move count to argument 2 register */ 487ENTRY_NOPROFILE(ins8) 488 cmpwi 5,0 /* len == 0? */ 489 beqlr- /* return if len == 0 */ 490 addi 5,5,-1 /* len -= 1 */ 491 add 5,5,4 /* len += src */ 492 addi 4,4,-1 /* pre-decrement */ 4931: lbz 0,0(3) /* load value */ 494 stbu 0,1(4) /* store and increment */ 495 cmpl 0,4,5 /* at the end? */ 496 bne+ 1b /* nope, do another pass */ 497 eieio /* memory barrier (reorder protection) */ 498 DBGSYNC /* force exceptions */ 499 blr /* return */ 500 501/* LINTSTUB: Func: void bsrm2_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int16_t *addr, size_t len) */ 502/* LINTSTUB: Func: void bsrm2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int16_t *addr, size_t len) */ 503/* LINTSTUB: Func: void ins16(const volatile u_int16_t *src, u_int16_t *dst, size_t len) */ 504 505ENTRY_NOPROFILE(bsrm2_s) 506 lwz 0,0(3) /* get log2(stride) */ 507 rotlw 5,5,0 /* shift offset */ 508ENTRY_NOPROFILE(bsrm2) 509 add 3,4,5 /* add offset to handle & place in argument 0 */ 510 mr 4,6 /* move addr to argument 1 register */ 511 mr 5,7 /* move count to argument 2 register */ 512ENTRY_NOPROFILE(ins16) 513 cmpwi 5,0 /* len == 0? */ 514 beqlr- /* return if len == 0 */ 515 addi 5,5,-1 /* len -= 1 */ 516 slwi 5,5,1 /* len *= 2 */ 517 add 5,5,4 /* len += src */ 518 addi 4,4,-2 /* pre-decrement */ 5191: lhz 0,0(3) /* load value */ 520 sthu 0,2(4) /* store and increment */ 521 cmpl 0,4,5 /* at the end? */ 522 bne+ 1b /* nope, do another pass */ 523 eieio /* memory barrier (reorder protection) */ 524 DBGSYNC /* force exceptions */ 525 blr /* return */ 526 527/* LINTSTUB: Func: void bsrm4_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int32_t *addr, size_t len) */ 528/* LINTSTUB: Func: void bsrm4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int32_t *addr, size_t len) */ 529/* LINTSTUB: Func: void ins32(const volatile u_int32_t *src, u_int32_t *dst, size_t len) */ 530 531ENTRY_NOPROFILE(bsrm4_s) 532 lwz 0,0(3) /* get log2(stride) */ 533 rotlw 5,5,0 /* shift offset */ 534ENTRY_NOPROFILE(bsrm4) 535 add 3,4,5 /* add offset to handle & place in argument 0 */ 536 mr 4,6 /* move addr to argument 1 register */ 537 mr 5,7 /* move count to argument 2 register */ 538ENTRY_NOPROFILE(ins32) 539 cmpwi 5,0 /* len == 0? */ 540 beqlr- /* return if len == 0 */ 541 addi 5,5,-1 /* len -= 1 */ 542 slwi 5,5,2 /* len *= 4 */ 543 add 5,5,4 /* len += src */ 544 addi 4,4,-4 /* pre-decrement */ 5451: lwz 0,0(3) /* load value */ 546 stwu 0,4(4) /* store and increment */ 547 cmpl 0,4,5 /* at the end? */ 548 bne+ 1b /* nope, do another pass */ 549 eieio /* memory barrier (reorder protection) */ 550 DBGSYNC /* force exceptions */ 551 blr /* return */ 552 553/* LINTSTUB: Func: void bsrm8_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int64_t *addr, size_t len) */ 554/* LINTSTUB: Func: void bsrm8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int64_t *addr, size_t len) */ 555ENTRY_NOPROFILE(bsrm8_s) 556ENTRY_NOPROFILE(bsrm8) 557 trap 558 559/* LINTSTUB: Func: void bsrm2rb(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int16_t *addr, size_t len) */ 560/* LINTSTUB: Func: void ins16rb(const volatile u_int16_t *src, u_int16_t *dst, size_t len) */ 561 562ENTRY_NOPROFILE(bsrm2rb_s) 563 lwz 0,0(3) /* get log2(stride) */ 564 rotlw 5,5,0 /* shift offset */ 565ENTRY_NOPROFILE(bsrm2rb) 566 add 3,4,5 /* add offset to handle & place in argument 0 */ 567 mr 4,6 /* move addr to argument 1 register */ 568 mr 5,7 /* move count to argument 2 register */ 569ENTRY_NOPROFILE(ins16rb) 570 cmpwi 5,0 /* len == 0? */ 571 beqlr- /* return if len == 0 */ 572 addi 5,5,-1 /* len -= 1 */ 573 slwi 5,5,1 /* len *= 2 */ 574 add 5,5,4 /* len += src */ 575 addi 4,4,-2 /* pre-decrement */ 5761: lhbrx 0,0,3 /* load value (byte reversed) */ 577 sthu 0,2(4) /* store and increment */ 578 cmpl 0,4,5 /* at the end? */ 579 bne+ 1b /* nope, do another pass */ 580 eieio /* memory barrier (reorder protection) */ 581 DBGSYNC /* force exceptions */ 582 blr /* return */ 583 584/* LINTSTUB: Func: void bsrm4rb_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int32_t *addr, size_t len) */ 585/* LINTSTUB: Func: void bsrm4rb(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int32_t *addr, size_t len) */ 586/* LINTSTUB: Func: void ins32rb(const volatile u_int32_t *src, u_int32_t *dst, size_t len) */ 587ENTRY_NOPROFILE(bsrm4rb_s) 588 lwz 0,0(3) /* get log2(stride) */ 589 rotlw 5,5,0 /* shift offset */ 590ENTRY_NOPROFILE(bsrm4rb) 591 add 3,4,5 /* add offset to handle & place in argument 0 */ 592 mr 4,6 /* move addr to argument 1 register */ 593 mr 5,7 /* move count to argument 2 register */ 594ENTRY_NOPROFILE(ins32rb) 595 cmpwi 5,0 /* len == 0? */ 596 beqlr- /* return if len == 0 */ 597 addi 5,5,-1 /* len -= 1 */ 598 slwi 5,5,2 /* len *= 4 */ 599 add 5,5,4 /* len += src */ 600 addi 4,4,-4 /* pre-decrement */ 6011: lwbrx 0,0,3 /* load value (byte reversed) */ 602 stwu 0,4(4) /* store and increment */ 603 cmpl 0,4,5 /* at the end? */ 604 bne+ 1b /* nope, do another pass */ 605 eieio /* memory barrier (reorder protection) */ 606 DBGSYNC /* force exceptions */ 607 blr /* return */ 608 609/* LINTSTUB: Func: void bsrm8rb_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int64_t *addr, size_t len) */ 610/* LINTSTUB: Func: void bsrm8rb(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int64_t *addr, size_t len) */ 611ENTRY_NOPROFILE(bsrm8rb_s) 612ENTRY_NOPROFILE(bsrm8rb) 613 trap 614 615/* LINTSTUB: Func: void bswr1_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int8_t *a, size_t c); */ 616/* LINTSTUB: Func: void bswr1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int8_t *a, size_t c); */ 617ENTRY_NOPROFILE(bswr1_s) 618 lwz 0,0(3) /* get log2(stride) */ 619 li 8,1 /* distance between dst bytes */ 620 rotlw 5,5,0 /* shift offset */ 621 rotlw 8,8,0 /* shift distance */ 622 b .Lbswr1_enter 623ENTRY_NOPROFILE(bswr1) 624 li 8,1 /* distance between dst bytes */ 625.Lbswr1_enter: 626 add 3,4,5 /* add offset to handle & place in argument 0 */ 627 cmpwi 7,0 /* len == 0? */ 628 beqlr- /* return if len == 0 */ 629 addi 7,7,-1 /* len -= 1 */ 630 add 7,7,6 /* len += src */ 631 addi 6,6,-1 /* pre-decrement */ 632 sub 3,3,8 6331: lbzu 0,1(6) /* load and increment */ 634 stbux 0,3,8 /* store and add distance */ 635 cmpl 0,6,7 /* at the end? */ 636 bne+ 1b /* nope, do another pass */ 637 eieio /* memory barrier (reorder protection) */ 638 DBGSYNC /* force exceptions */ 639 blr /* return */ 640 641/* LINTSTUB: Func: void bswr2_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int16_t *a, size_t c); */ 642/* LINTSTUB: Func: void bswr2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int16_t *a, size_t c); */ 643ENTRY_NOPROFILE(bswr2_s) 644 lwz 0,0(3) /* get log2(stride) */ 645 li 8,2 /* distance between dst halfwords */ 646 rotlw 5,5,0 /* shift offset */ 647 rotlw 8,8,0 /* shift distance */ 648 b .Lbswr2_enter 649ENTRY_NOPROFILE(bswr2) 650 li 8,2 /* distance between dst halfwords */ 651.Lbswr2_enter: 652 add 3,4,5 /* add offset to handle & place in argument 0 */ 653 cmpwi 7,0 /* len == 0? */ 654 beqlr- /* return if len == 0 */ 655 addi 7,7,-1 /* len -= 1 */ 656 slwi 7,7,1 /* len *= 2 */ 657 add 7,7,6 /* len += src */ 658 addi 6,6,-2 /* pre-decrement */ 659 sub 3,3,8 6601: lhzu 0,2(6) /* load and increment */ 661 sthux 0,3,8 /* store and add distance */ 662 cmpl 0,6,7 /* at the end? */ 663 bne+ 1b /* nope, do another pass */ 664 eieio /* memory barrier (reorder protection) */ 665 DBGSYNC /* force exceptions */ 666 blr /* return */ 667 668/* LINTSTUB: Func: void bswr2rb_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int16_t *a, size_t c); */ 669/* LINTSTUB: Func: void bswr2rb(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int16_t *a, size_t c); */ 670ENTRY_NOPROFILE(bswr2rb_s) 671 lwz 0,0(3) /* get log2(stride) */ 672 li 8,2 /* distance between dst halfwords */ 673 rotlw 5,5,0 /* shift offset */ 674 rotlw 8,8,0 /* shift distance */ 675 b .Lbswr2rb_enter 676ENTRY_NOPROFILE(bswr2rb) 677 li 8,2 /* distance between dst halfwords */ 678.Lbswr2rb_enter: 679 add 3,4,5 /* add offset to handle & place in argument 0 */ 680 cmpwi 7,0 /* len == 0? */ 681 beqlr- /* return if len == 0 */ 682 addi 7,7,-1 /* len -= 1 */ 683 slwi 7,7,1 /* len *= 2 */ 684 add 7,7,6 /* len += src */ 685 addi 6,6,-2 /* pre-decrement */ 6861: lbzu 0,2(6) /* load and increment */ 687 sthbrx 0,0,3 /* store (reversed) 688 add 3,3,8 /* dst += distance */ 689 cmpl 0,6,7 /* at the end? */ 690 bne+ 1b /* nope, do another pass */ 691 eieio /* memory barrier (reorder protection) */ 692 DBGSYNC /* force exceptions */ 693 blr /* return */ 694 695/* LINTSTUB: Func: void bswr4_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int32_t *a, size_t c); */ 696/* LINTSTUB: Func: void bswr4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int32_t *a, size_t c); */ 697ENTRY_NOPROFILE(bswr4_s) 698 lwz 0,0(3) /* get log2(stride) */ 699 li 8,4 /* distance between dst halfwords */ 700 rotlw 5,5,0 /* shift offset */ 701 rotlw 8,8,0 /* shift distance */ 702 b .Lbswr4_enter 703ENTRY_NOPROFILE(bswr4) 704 li 8,4 /* distance between dst halfwords */ 705.Lbswr4_enter: 706 add 3,4,5 /* add offset to handle & place in argument 0 */ 707 cmpwi 7,0 /* len == 0? */ 708 beqlr- /* return if len == 0 */ 709 addi 7,7,-1 /* len -= 1 */ 710 slwi 7,7,2 /* len *= 4 */ 711 add 7,7,6 /* len += src */ 712 addi 6,6,-4 /* pre-decrement */ 713 sub 3,3,8 7141: lwzu 0,4(6) /* load and increment */ 715 stwux 0,3,8 /* store and add distance */ 716 cmpl 0,6,7 /* at the end? */ 717 bne+ 1b /* nope, do another pass */ 718 eieio /* memory barrier (reorder protection) */ 719 DBGSYNC /* force exceptions */ 720 blr /* return */ 721 722/* LINTSTUB: Func: void bswr4rb_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int32_t *a, size_t c); */ 723/* LINTSTUB: Func: void bswr4rb(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int32_t *a, size_t c); */ 724ENTRY_NOPROFILE(bswr4rb_s) 725 lwz 0,0(3) /* get log2(stride) */ 726 li 8,4 /* distance between dst halfwords */ 727 rotlw 5,5,0 /* shift offset */ 728 rotlw 8,8,0 /* shift distance */ 729 b .Lbswr4rb_enter 730ENTRY_NOPROFILE(bswr4rb) 731 li 8,4 /* distance between dst halfwords */ 732.Lbswr4rb_enter: 733 add 3,4,5 /* add offset to handle & place in argument 0 */ 734 cmpwi 7,0 /* len == 0? */ 735 beqlr- /* return if len == 0 */ 736 addi 7,7,-1 /* len -= 1 */ 737 slwi 7,7,2 /* len *= 4 */ 738 add 7,7,6 /* len += src */ 739 addi 6,6,-4 /* pre-decrement */ 7401: lwzu 0,4(6) /* load and increment */ 741 stwbrx 0,0,3 /* store (reversed) 742 add 3,3,8 /* dst += distance */ 743 cmpl 0,6,7 /* at the end? */ 744 bne+ 1b /* nope, do another pass */ 745 eieio /* memory barrier (reorder protection) */ 746 DBGSYNC /* force exceptions */ 747 blr /* return */ 748 749/* LINTSTUB: Func: void bswr8_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int64_t *a, size_t c); */ 750/* LINTSTUB: Func: void bswr8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int64_t *a, size_t c); */ 751/* LINTSTUB: Func: void bswr8rb_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int64_t *a, size_t c); */ 752/* LINTSTUB: Func: void bswr8rb(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int64_t *a, size_t c); */ 753ENTRY_NOPROFILE(bswr8_s) 754ENTRY_NOPROFILE(bswr8rb_s) 755 lwz 0,0(3) 756 rotlw 5,5,0 757ENTRY_NOPROFILE(bswr8) 758ENTRY_NOPROFILE(bswr8rb) 759 trap 760 761/* LINTSTUB: Func: void bsrr1_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int8_t *a, size_t c); */ 762/* LINTSTUB: Func: void bsrr1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int8_t *a, size_t c); */ 763ENTRY_NOPROFILE(bsrr1_s) 764 lwz 0,0(3) /* get log2(stride) */ 765 li 8,1 /* distance between src bytes */ 766 rotlw 5,5,0 /* shift offset */ 767 rotlw 8,8,0 /* shift distance */ 768 b .Lbsrr1_enter 769ENTRY_NOPROFILE(bsrr1) 770 li 8,1 /* distance between src bytes */ 771.Lbsrr1_enter: 772 add 3,4,5 /* add offset to handle & place in argument 0 */ 773 cmpwi 7,0 /* len == 0? */ 774 beqlr- /* return if len == 0 */ 775 addi 7,7,-1 /* len -= 1 */ 776 add 7,7,6 /* len += src */ 777 addi 6,6,-1 /* pre-decrement */ 778 sub 3,3,8 7791: lbzux 0,3,8 /* load value and add distance */ 780 stbu 0,1(6) /* store and increment */ 781 cmpl 0,6,7 /* at the end? */ 782 bne+ 1b /* nope, do another pass */ 783 eieio /* memory barrier (reorder protection) */ 784 DBGSYNC /* force exceptions */ 785 blr /* return */ 786 787/* LINTSTUB: Func: void bsrr2_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int16_t *a, size_t c); */ 788/* LINTSTUB: Func: void bsrr2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int16_t *a, size_t c); */ 789ENTRY_NOPROFILE(bsrr2_s) 790 lwz 0,0(3) /* get log2(stride) */ 791 li 8,2 /* distance between src halfwords */ 792 rotlw 5,5,0 /* shift offset */ 793 rotlw 8,8,0 /* shift distance */ 794 b .Lbsrr2_enter 795ENTRY_NOPROFILE(bsrr2) 796 li 8,2 /* distance between src halfwords */ 797.Lbsrr2_enter: 798 add 3,4,5 /* add offset to handle & place in argument 0 */ 799 cmpwi 7,0 /* len == 0? */ 800 beqlr- /* return if len == 0 */ 801 addi 7,7,-1 /* len -= 1 */ 802 slwi 7,7,1 /* len *= 2 */ 803 add 7,7,6 /* len += src */ 804 addi 6,6,-2 /* pre-decrement */ 805 sub 3,3,8 8061: lhzux 0,3,8 /* load value and add distance */ 807 sthu 0,2(6) /* store and increment */ 808 cmpl 0,6,7 /* at the end? */ 809 bne+ 1b /* nope, do another pass */ 810 eieio /* memory barrier (reorder protection) */ 811 DBGSYNC /* force exceptions */ 812 blr /* return */ 813 814/* LINTSTUB: Func: void bsrr2rb_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int16_t *a, size_t c); */ 815/* LINTSTUB: Func: void bsrr2rb(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int16_t *a, size_t c); */ 816ENTRY_NOPROFILE(bsrr2rb_s) 817 lwz 0,0(3) /* get log2(stride) */ 818 li 8,2 /* distance between source halfwords */ 819 rotlw 5,5,0 /* shift offset */ 820 rotlw 8,8,0 /* shift distance */ 821 b .Lbsrr2rb_enter 822ENTRY_NOPROFILE(bsrr2rb) 823 li 8,2 /* distance between source halfwords */ 824.Lbsrr2rb_enter: 825 add 3,4,5 /* add offset to handle & place in argument 0 */ 826 cmpwi 7,0 /* len == 0? */ 827 beqlr- /* return if len == 0 */ 828 addi 7,7,-1 /* len -= 1 */ 829 slwi 7,7,1 /* len *= 2 */ 830 add 7,7,6 /* len += src */ 831 addi 6,6,-2 /* pre-decrement */ 8321: lhbrx 0,0,3 /* load value (reversed) */ 833 add 3,3,8 /* src += distance */ 834 sthu 0,2(6) /* store and increment */ 835 cmpl 0,6,7 /* at the end? */ 836 bne+ 1b /* nope, do another pass */ 837 eieio /* memory barrier (reorder protection) */ 838 DBGSYNC /* force exceptions */ 839 blr /* return */ 840 841/* LINTSTUB: Func: void bsrr4_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int32_t *a, size_t c); */ 842/* LINTSTUB: Func: void bsrr4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int32_t *a, size_t c); */ 843ENTRY_NOPROFILE(bsrr4_s) 844 lwz 0,0(3) /* get log2(stride) */ 845 li 8,4 /* distance between src words */ 846 rotlw 5,5,0 /* shift offset */ 847 rotlw 8,8,0 /* shift distance */ 848 b .Lbsrr4_enter 849ENTRY_NOPROFILE(bsrr4) 850 li 8,4 /* distance between src words */ 851.Lbsrr4_enter: 852 add 3,4,5 /* add offset to handle & place in argument 0 */ 853 cmpwi 7,0 /* len == 0? */ 854 beqlr- /* return if len == 0 */ 855 addi 7,7,-1 /* len -= 1 */ 856 slwi 7,7,2 /* len *= 4 */ 857 add 7,7,6 /* len += src */ 858 addi 6,6,-4 /* pre-decrement */ 859 sub 3,3,8 8601: lwzux 0,3,8 /* load value and add distance */ 861 stwu 0,4(6) /* store and increment */ 862 cmpl 0,6,7 /* at the end? */ 863 bne+ 1b /* nope, do another pass */ 864 eieio /* memory barrier (reorder protection) */ 865 DBGSYNC /* force exceptions */ 866 blr /* return */ 867 868/* LINTSTUB: Func: void bsrr4rb_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int32_t *a, size_t c); */ 869/* LINTSTUB: Func: void bsrr4rb(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int32_t *a, size_t c); */ 870ENTRY_NOPROFILE(bsrr4rb_s) 871 lwz 0,0(3) /* get log2(stride) */ 872 li 8,4 /* distance between src words */ 873 rotlw 5,5,0 /* shift offset */ 874 rotlw 8,8,0 /* shift distance */ 875 b .Lbsrr4rb_enter 876ENTRY_NOPROFILE(bsrr4rb) 877 li 8,4 /* distance between src words */ 878.Lbsrr4rb_enter: 879 add 3,4,5 /* add offset to handle & place in argument 0 */ 880 mr 4,6 /* move addr to argument 1 register */ 881 cmpwi 7,0 /* len == 0? */ 882 beqlr- /* return if len == 0 */ 883 addi 7,7,-1 /* len -= 1 */ 884 slwi 7,7,2 /* len *= 4 */ 885 add 7,7,6 /* len += src */ 886 addi 6,6,-4 /* pre-decrement */ 8871: lwbrx 0,0,3 /* load value (reversed) */ 888 add 3,3,8 /* src += distance */ 889 sthu 0,4(6) /* store and increment */ 890 cmpl 0,6,7 /* at the end? */ 891 bne+ 1b /* nope, do another pass */ 892 eieio /* memory barrier (reorder protection) */ 893 DBGSYNC /* force exceptions */ 894 blr /* return */ 895 896/* LINTSTUB: Func: void bsrr8_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int64_t *a, size_t c); */ 897/* LINTSTUB: Func: void bsrr8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int64_t *a, size_t c); */ 898/* LINTSTUB: Func: void bsrr8rb_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int64_t *a, size_t c); */ 899/* LINTSTUB: Func: void bsrr8rb(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int64_t *a, size_t c); */ 900ENTRY_NOPROFILE(bsrr8_s) 901ENTRY_NOPROFILE(bsrr8rb_s) 902 lwz 0,0(3) 903 rotlw 5,5,0 904ENTRY_NOPROFILE(bsrr8) 905ENTRY_NOPROFILE(bsrr8rb) 906 trap 907 908/* LINTSTUB: Func: void bssr1_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int8_t v); */ 909/* LINTSTUB: Func: void bssr1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int8_t v); */ 910/* LINTSTUB: Func: void bssr1rb_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int8_t v); */ 911/* LINTSTUB: Func: void bssr1rb(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, u_int8_t v); */ 912ENTRY_NOPROFILE(bssr1_s) 913ENTRY_NOPROFILE(bssr1rb_s) 914 lwz 0,0(3) 915 rotlw 5,5,0 916ENTRY_NOPROFILE(bssr1) 917ENTRY_NOPROFILE(bssr1rb) 918 trap 919 920/* LINTSTUB: Func: void bssr2_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int16_t v); */ 921/* LINTSTUB: Func: void bssr2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int16_t v); */ 922/* LINTSTUB: Func: void bssr2rb_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int16_t v); */ 923/* LINTSTUB: Func: void bssr2rb(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int16_t v); */ 924ENTRY_NOPROFILE(bssr2_s) 925ENTRY_NOPROFILE(bssr2rb_s) 926 lwz 0,0(3) 927 rotlw 5,5,0 928ENTRY_NOPROFILE(bssr2) 929ENTRY_NOPROFILE(bssr2rb) 930 trap 931 932/* LINTSTUB: Func: void bssr4_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int32_t v); */ 933/* LINTSTUB: Func: void bssr4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int32_t v); */ 934/* LINTSTUB: Func: void bssr4rb_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int32_t v); */ 935/* LINTSTUB: Func: void bssr4rb(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int32_t v); */ 936ENTRY_NOPROFILE(bssr4_s) 937ENTRY_NOPROFILE(bssr4rb_s) 938 lwz 0,0(3) 939 rotlw 5,5,0 940ENTRY_NOPROFILE(bssr4) 941ENTRY_NOPROFILE(bssr4rb) 942 trap 943 944/* LINTSTUB: Func: void bssr8_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int64_t v); */ 945/* LINTSTUB: Func: void bssr8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int64_t v); */ 946/* LINTSTUB: Func: void bssr8rb_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int64_t v); */ 947/* LINTSTUB: Func: void bssr8rb(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, const u_int64_t v); */ 948ENTRY_NOPROFILE(bssr8_s) 949ENTRY_NOPROFILE(bssr8rb_s) 950 lwz 0,0(3) 951 rotlw 5,5,0 952ENTRY_NOPROFILE(bssr8) 953ENTRY_NOPROFILE(bssr8rb) 954 trap 955 956/* LINTSTUB: Func: void bscr1_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, bus_space_handle_t h2, bus_size_t o2, size_t len); */ 957/* LINTSTUB: Func: void bscr1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, bus_space_handle_t h2, bus_size_t o2, size_t len); */ 958ENTRY_NOPROFILE(bscr1_s) 959 lwz 0,0(3) 960 rotlw 5,5,0 961ENTRY_NOPROFILE(bscr1) 962 trap 963 964 965/* LINTSTUB: Func: void bscr2_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, bus_space_handle_t h2, bus_size_t o2, size_t len); */ 966/* LINTSTUB: Func: void bscr2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, bus_space_handle_t h2, bus_size_t o2, size_t len); */ 967ENTRY_NOPROFILE(bscr2_s) 968 lwz 0,0(3) 969 rotlw 5,5,0 970ENTRY_NOPROFILE(bscr2) 971 trap 972 973 974/* LINTSTUB: Func: void bscr4_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, bus_space_handle_t h2, bus_size_t o2, size_t len); */ 975/* LINTSTUB: Func: void bscr4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, bus_space_handle_t h2, bus_size_t o2, size_t len); */ 976ENTRY_NOPROFILE(bscr4_s) 977 lwz 0,0(3) 978 rotlw 5,5,0 979ENTRY_NOPROFILE(bscr4) 980 trap 981 982 983/* LINTSTUB: Func: void bscr8_s(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, bus_space_handle_t h2, bus_size_t o2, size_t len); */ 984/* LINTSTUB: Func: void bscr8(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o, bus_space_handle_t h2, bus_size_t o2, size_t len); */ 985ENTRY_NOPROFILE(bscr8_s) 986 lwz 0,0(3) 987 rotlw 5,5,0 988ENTRY_NOPROFILE(bscr8) 989 trap 990 991