1
- #if !__ARMEB__
2
-
3
1
/ *
4
2
* Copyright (C) 2008 The Android Open Source Project
5
3
* All rights reserved.
42
40
* code safely callable from thumb mode , adjusting the return
43
41
* instructions to be compatible with pre - thumb ARM cpus , removal of
44
42
* prefetch code th at is not compatible with older cpus and support for
45
- * building as thumb 2 .
43
+ * building as thumb 2 and big - endian .
46
44
* /
47
45
48
46
.syntax unified
@@ -227,24 +225,45 @@ non_congruent:
227
225
* becomes aligned to 32 bits (r5 = nb of words to copy for alignment)
228
226
* /
229
227
movs r5 , r5 , lsl # 31
228
+
229
+ #if __ARMEB__
230
+ movmi r3 , r3 , ror # 24
231
+ strbmi r3 , [ r0 ], # 1
232
+ movcs r3 , r3 , ror # 24
233
+ strbcs r3 , [ r0 ], # 1
234
+ movcs r3 , r3 , ror # 24
235
+ strbcs r3 , [ r0 ], # 1
236
+ #else
230
237
strbmi r3 , [ r0 ], # 1
231
238
movmi r3 , r3 , lsr # 8
232
239
strbcs r3 , [ r0 ], # 1
233
240
movcs r3 , r3 , lsr # 8
234
241
strbcs r3 , [ r0 ], # 1
235
242
movcs r3 , r3 , lsr # 8
243
+ #endif
236
244
237
245
cmp r2 , # 4
238
246
blo partial_word_tail
239
247
248
+ #if __ARMEB__
249
+ mov r3 , r3 , lsr r12
250
+ mov r3 , r3 , lsl r12
251
+ #endif
252
+
240
253
/ * Align destination to 32 bytes (cache line boundary) * /
241
254
1 : tst r0 , # 0x1c
242
255
beq 2f
243
256
ldr r5 , [ r1 ], # 4
244
257
sub r2 , r2 , # 4
258
+ #if __ARMEB__
259
+ mov r4 , r5 , lsr lr
260
+ orr r4 , r4 , r3
261
+ mov r3 , r5 , lsl r12
262
+ #else
245
263
mov r4 , r5 , lsl lr
246
264
orr r4 , r4 , r3
247
265
mov r3 , r5 , lsr r12
266
+ #endif
248
267
str r4 , [ r0 ], # 4
249
268
cmp r2 , # 4
250
269
bhs 1b
@@ -270,6 +289,25 @@ loop16:
270
289
ldmia r1! , { r5 , r6 , r7 , r8 , r9 , r10 , r11 }
271
290
subs r2 , r2 , # 32
272
291
ldrhs r12 , [ r1 ], # 4
292
+ #if __ARMEB__
293
+ orr r3 , r3 , r4 , lsr # 16
294
+ mov r4 , r4 , lsl # 16
295
+ orr r4 , r4 , r5 , lsr # 16
296
+ mov r5 , r5 , lsl # 16
297
+ orr r5 , r5 , r6 , lsr # 16
298
+ mov r6 , r6 , lsl # 16
299
+ orr r6 , r6 , r7 , lsr # 16
300
+ mov r7 , r7 , lsl # 16
301
+ orr r7 , r7 , r8 , lsr # 16
302
+ mov r8 , r8 , lsl # 16
303
+ orr r8 , r8 , r9 , lsr # 16
304
+ mov r9 , r9 , lsl # 16
305
+ orr r9 , r9 , r10 , lsr # 16
306
+ mov r10 , r10 , lsl # 16
307
+ orr r10 , r10 , r11 , lsr # 16
308
+ stmia r0! , {r3 , r4 , r5 , r6 , r7 , r8 , r9 , r10 }
309
+ mov r3 , r11 , lsl # 16
310
+ #else
273
311
orr r3 , r3 , r4 , lsl # 16
274
312
mov r4 , r4 , lsr # 16
275
313
orr r4 , r4 , r5 , lsl # 16
@@ -287,6 +325,7 @@ loop16:
287
325
orr r10 , r10 , r11 , lsl # 16
288
326
stmia r0! , {r3 , r4 , r5 , r6 , r7 , r8 , r9 , r10 }
289
327
mov r3 , r11 , lsr # 16
328
+ #endif
290
329
bhs 1b
291
330
b less_than_thirtytwo
292
331
@@ -296,6 +335,25 @@ loop8:
296
335
ldmia r1! , { r5 , r6 , r7 , r8 , r9 , r10 , r11 }
297
336
subs r2 , r2 , # 32
298
337
ldrhs r12 , [ r1 ], # 4
338
+ #if __ARMEB__
339
+ orr r3 , r3 , r4 , lsr # 24
340
+ mov r4 , r4 , lsl # 8
341
+ orr r4 , r4 , r5 , lsr # 24
342
+ mov r5 , r5 , lsl # 8
343
+ orr r5 , r5 , r6 , lsr # 24
344
+ mov r6 , r6 , lsl # 8
345
+ orr r6 , r6 , r7 , lsr # 24
346
+ mov r7 , r7 , lsl # 8
347
+ orr r7 , r7 , r8 , lsr # 24
348
+ mov r8 , r8 , lsl # 8
349
+ orr r8 , r8 , r9 , lsr # 24
350
+ mov r9 , r9 , lsl # 8
351
+ orr r9 , r9 , r10 , lsr # 24
352
+ mov r10 , r10 , lsl # 8
353
+ orr r10 , r10 , r11 , lsr # 24
354
+ stmia r0! , {r3 , r4 , r5 , r6 , r7 , r8 , r9 , r10 }
355
+ mov r3 , r11 , lsl # 8
356
+ #else
299
357
orr r3 , r3 , r4 , lsl # 24
300
358
mov r4 , r4 , lsr # 8
301
359
orr r4 , r4 , r5 , lsl # 24
@@ -313,6 +371,7 @@ loop8:
313
371
orr r10 , r10 , r11 , lsl # 24
314
372
stmia r0! , {r3 , r4 , r5 , r6 , r7 , r8 , r9 , r10 }
315
373
mov r3 , r11 , lsr # 8
374
+ #endif
316
375
bhs 1b
317
376
b less_than_thirtytwo
318
377
@@ -322,6 +381,25 @@ loop24:
322
381
ldmia r1! , { r5 , r6 , r7 , r8 , r9 , r10 , r11 }
323
382
subs r2 , r2 , # 32
324
383
ldrhs r12 , [ r1 ], # 4
384
+ #if __ARMEB__
385
+ orr r3 , r3 , r4 , lsr # 8
386
+ mov r4 , r4 , lsl # 24
387
+ orr r4 , r4 , r5 , lsr # 8
388
+ mov r5 , r5 , lsl # 24
389
+ orr r5 , r5 , r6 , lsr # 8
390
+ mov r6 , r6 , lsl # 24
391
+ orr r6 , r6 , r7 , lsr # 8
392
+ mov r7 , r7 , lsl # 24
393
+ orr r7 , r7 , r8 , lsr # 8
394
+ mov r8 , r8 , lsl # 24
395
+ orr r8 , r8 , r9 , lsr # 8
396
+ mov r9 , r9 , lsl # 24
397
+ orr r9 , r9 , r10 , lsr # 8
398
+ mov r10 , r10 , lsl # 24
399
+ orr r10 , r10 , r11 , lsr # 8
400
+ stmia r0! , {r3 , r4 , r5 , r6 , r7 , r8 , r9 , r10 }
401
+ mov r3 , r11 , lsl # 24
402
+ #else
325
403
orr r3 , r3 , r4 , lsl # 8
326
404
mov r4 , r4 , lsr # 24
327
405
orr r4 , r4 , r5 , lsl # 8
@@ -339,6 +417,7 @@ loop24:
339
417
orr r10 , r10 , r11 , lsl # 8
340
418
stmia r0! , {r3 , r4 , r5 , r6 , r7 , r8 , r9 , r10 }
341
419
mov r3 , r11 , lsr # 24
420
+ #endif
342
421
bhs 1b
343
422
344
423
less_than_thirtytwo:
@@ -350,21 +429,36 @@ less_than_thirtytwo:
350
429
351
430
1 : ldr r5 , [ r1 ], # 4
352
431
sub r2 , r2 , # 4
432
+ #if __ARMEB__
433
+ mov r4 , r5 , lsr lr
434
+ orr r4 , r4 , r3
435
+ mov r3 , r5 , lsl r12
436
+ #else
353
437
mov r4 , r5 , lsl lr
354
438
orr r4 , r4 , r3
355
439
mov r3 , r5 , lsr r12
440
+ #endif
356
441
str r4 , [ r0 ], # 4
357
442
cmp r2 , # 4
358
443
bhs 1b
359
444
360
445
partial_word_tail:
361
446
/ * we have a partial word in the input buffer * /
362
447
movs r5 , lr , lsl #( 31 - 3 )
448
+ #if __ARMEB__
449
+ movmi r3 , r3 , ror # 24
450
+ strbmi r3 , [ r0 ], # 1
451
+ movcs r3 , r3 , ror # 24
452
+ strbcs r3 , [ r0 ], # 1
453
+ movcs r3 , r3 , ror # 24
454
+ strbcs r3 , [ r0 ], # 1
455
+ #else
363
456
strbmi r3 , [ r0 ], # 1
364
457
movmi r3 , r3 , lsr # 8
365
458
strbcs r3 , [ r0 ], # 1
366
459
movcs r3 , r3 , lsr # 8
367
460
strbcs r3 , [ r0 ], # 1
461
+ #endif
368
462
369
463
/ * Refill spilled registers from the stack. Don't update sp . * /
370
464
ldmfd sp , {r5 - r11 }
@@ -383,4 +477,3 @@ copy_last_3_and_return:
383
477
ldmfd sp ! , {r0 , r4 , lr}
384
478
bx lr
385
479
386
- #endif
0 commit comments