@@ -396,119 +396,119 @@ Lnovec:
396
396
#elif defined(__ppc__)
397
397
398
398
DEFINE_LIBUNWIND_PRIVATE_FUNCTION(_ZN9libunwind13Registers_ppc6jumptoEv)
399
- ;
400
- ; void libunwind: :Registers_ppc::jumpto()
401
- ;
402
- ; On entry:
403
- ; thread_state pointer is in r3
404
- ;
405
-
406
- ; restore integral registerrs
407
- ; skip r0 for now
408
- ; skip r1 for now
409
- lwz r2, 16 (r3)
410
- ; skip r3 for now
411
- ; skip r4 for now
412
- ; skip r5 for now
413
- lwz r6, 32 (r3)
414
- lwz r7, 36 (r3)
415
- lwz r8, 40 (r3)
416
- lwz r9, 44 (r3)
417
- lwz r10, 48 (r3)
418
- lwz r11, 52 (r3)
419
- lwz r12, 56 (r3)
420
- lwz r13, 60 (r3)
421
- lwz r14, 64 (r3)
422
- lwz r15, 68 (r3)
423
- lwz r16, 72 (r3)
424
- lwz r17, 76 (r3)
425
- lwz r18, 80 (r3)
426
- lwz r19, 84 (r3)
427
- lwz r20, 88 (r3)
428
- lwz r21, 92 (r3)
429
- lwz r22, 96 (r3)
430
- lwz r23,100 (r3)
431
- lwz r24,104 (r3)
432
- lwz r25,108 (r3)
433
- lwz r26,112 (r3)
434
- lwz r27,116 (r3)
435
- lwz r28,120 (r3)
436
- lwz r29,124 (r3)
437
- lwz r30,128 (r3)
438
- lwz r31,132 (r3)
439
-
440
- ; restore float registers
441
- lfd f0, 160 (r3)
442
- lfd f1, 168 (r3)
443
- lfd f2, 176 (r3)
444
- lfd f3, 184 (r3)
445
- lfd f4, 192 (r3)
446
- lfd f5, 200 (r3)
447
- lfd f6, 208 (r3)
448
- lfd f7, 216 (r3)
449
- lfd f8, 224 (r3)
450
- lfd f9, 232 (r3)
451
- lfd f10,240 (r3)
452
- lfd f11,248 (r3)
453
- lfd f12,256 (r3)
454
- lfd f13,264 (r3)
455
- lfd f14,272 (r3)
456
- lfd f15,280 (r3)
457
- lfd f16,288 (r3)
458
- lfd f17,296 (r3)
459
- lfd f18,304 (r3)
460
- lfd f19,312 (r3)
461
- lfd f20,320 (r3)
462
- lfd f21,328 (r3)
463
- lfd f22,336 (r3)
464
- lfd f23,344 (r3)
465
- lfd f24,352 (r3)
466
- lfd f25,360 (r3)
467
- lfd f26,368 (r3)
468
- lfd f27,376 (r3)
469
- lfd f28,384 (r3)
470
- lfd f29,392 (r3)
471
- lfd f30,400 (r3)
472
- lfd f31,408 (r3)
473
-
474
- ; restore vector registers if any are in use
475
- lwz r5,156 (r3) ; test VRsave
476
- cmpwi r5,0
477
- beq Lnovec
478
-
479
- subi r4,r1,16
480
- rlwinm r4,r4,0 ,0 ,27 ; mask low 4 -bits
481
- ; r4 is now a 16 -byte aligned pointer into the red zone
482
- ; the _vectorRegisters may not be 16 -byte aligned so copy via red zone temp buffer
399
+ //
400
+ // void libunwind::Registers_ppc::jumpto()
401
+ //
402
+ // On entry:
403
+ // thread_state pointer is in r3
404
+ //
405
+
406
+ // restore integral registerrs
407
+ // skip r0 for now
408
+ // skip r1 for now
409
+ lwz %r2, 16 (%r3)
410
+ // skip r3 for now
411
+ // skip r4 for now
412
+ // skip r5 for now
413
+ lwz %r6, 32 (%r3)
414
+ lwz %r7, 36 (%r3)
415
+ lwz %r8 , 40 (%r3)
416
+ lwz %r9 , 44 (%r3)
417
+ lwz %r10 , 48 (%r3)
418
+ lwz %r11 , 52 (%r3)
419
+ lwz %r12 , 56 (%r3)
420
+ lwz %r13 , 60 (%r3)
421
+ lwz %r14 , 64 (%r3)
422
+ lwz %r15 , 68 (%r3)
423
+ lwz %r16, 72 (%r3)
424
+ lwz %r17, 76 (%r3)
425
+ lwz %r18, 80 (%r3)
426
+ lwz %r19, 84 (%r3)
427
+ lwz %r20, 88 (%r3)
428
+ lwz %r21, 92 (%r3)
429
+ lwz %r22, 96 (%r3)
430
+ lwz %r23,100 (%r3)
431
+ lwz %r24,104 (%r3)
432
+ lwz %r25,108 (%r3)
433
+ lwz %r26,112 (%r3)
434
+ lwz %r27,116 (%r3)
435
+ lwz %r28,120 (%r3)
436
+ lwz %r29,124 (%r3)
437
+ lwz %r30,128 (%r3)
438
+ lwz %r31,132 (%r3)
439
+
440
+ // restore float registers
441
+ lfd %f0, 160 (%r3)
442
+ lfd %f1, 168 (%r3)
443
+ lfd %f2, 176 (%r3)
444
+ lfd %f3, 184 (%r3)
445
+ lfd %f4, 192 (%r3)
446
+ lfd %f5, 200 (%r3)
447
+ lfd %f6, 208 (%r3)
448
+ lfd %f7, 216 (%r3)
449
+ lfd %f8, 224 (%r3)
450
+ lfd %f9, 232 (%r3)
451
+ lfd %f10,240 (%r3)
452
+ lfd %f11,248 (%r3)
453
+ lfd %f12,256 (%r3)
454
+ lfd %f13,264 (%r3)
455
+ lfd %f14,272 (%r3)
456
+ lfd %f15,280 (%r3)
457
+ lfd %f16,288 (%r3)
458
+ lfd %f17,296 (%r3)
459
+ lfd %f18,304 (%r3)
460
+ lfd %f19,312 (%r3)
461
+ lfd %f20,320 (%r3)
462
+ lfd %f21,328 (%r3)
463
+ lfd %f22,336 (%r3)
464
+ lfd %f23,344 (%r3)
465
+ lfd %f24,352 (%r3)
466
+ lfd %f25,360 (%r3)
467
+ lfd %f26,368 (%r3)
468
+ lfd %f27,376 (%r3)
469
+ lfd %f28,384 (%r3)
470
+ lfd %f29,392 (%r3)
471
+ lfd %f30,400 (%r3)
472
+ lfd %f31,408 (%r3)
473
+
474
+ // restore vector registers if any are in use
475
+ lwz %r5, 156 (%r3) // test VRsave
476
+ cmpwi %r5, 0
477
+ beq Lnovec
483
478
479
+ subi %r4, %r1, 16
480
+ rlwinm %r4, %r4, 0 , 0 , 27 // mask low 4-bits
481
+ // r4 is now a 16-byte aligned pointer into the red zone
482
+ // the _vectorRegisters may not be 16-byte aligned so copy via red zone temp buffer
483
+
484
484
485
485
#define LOAD_VECTOR_UNALIGNEDl(_index) \
486
- andis. r0,r5,(1 <<(15 -_index)) @ \
487
- beq Ldone ## _index @ \
488
- lwz r0, 424 +_index*16 (r3) @ \
489
- stw r0, 0 (r4) @ \
490
- lwz r0, 424 +_index*16 +4 (r3) @ \
491
- stw r0, 4 (r4) @ \
492
- lwz r0, 424 +_index*16 +8 (r3) @ \
493
- stw r0, 8 (r4) @ \
494
- lwz r0, 424 +_index*16 +12 (r3)@ \
495
- stw r0, 12 (r4) @ \
496
- lvx v ## _index,0, r4 @ \
497
- Ldone ## _index:
486
+ andis. % r0, % r5, (1 <<(15 -_index)) SEPARATOR \
487
+ beq Ldone ## _index SEPARATOR \
488
+ lwz % r0, 424 +_index*16 (% r3) SEPARATOR \
489
+ stw % r0, 0 (% r4) SEPARATOR \
490
+ lwz % r0, 424 +_index*16 +4 (% r3) SEPARATOR \
491
+ stw % r0, 4 (% r4) SEPARATOR \
492
+ lwz % r0, 424 +_index*16 +8 (% r3) SEPARATOR \
493
+ stw % r0, 8 (% r4) SEPARATOR \
494
+ lwz % r0, 424 +_index*16 +12 (% r3) SEPARATOR \
495
+ stw % r0, 12 (% r4) SEPARATOR \
496
+ lvx % v ## _index, 0, % r4 SEPARATOR \
497
+ Ldone ## _index:
498
498
499
499
#define LOAD_VECTOR_UNALIGNEDh(_index) \
500
- andi. r0,r5,(1 <<(31 -_index)) @ \
501
- beq Ldone ## _index @ \
502
- lwz r0, 424 +_index*16 (r3) @ \
503
- stw r0, 0 (r4) @ \
504
- lwz r0, 424 +_index*16 +4 (r3) @ \
505
- stw r0, 4 (r4) @ \
506
- lwz r0, 424 +_index*16 +8 (r3) @ \
507
- stw r0, 8 (r4) @ \
508
- lwz r0, 424 +_index*16 +12 (r3)@ \
509
- stw r0, 12 (r4) @ \
510
- lvx v ## _index,0, r4 @ \
511
- Ldone ## _index:
500
+ andi. % r0, % r5, (1 <<(31 -_index)) SEPARATOR \
501
+ beq Ldone ## _index SEPARATOR \
502
+ lwz % r0, 424 +_index*16 (% r3) SEPARATOR \
503
+ stw % r0, 0 (% r4) SEPARATOR \
504
+ lwz % r0, 424 +_index*16 +4 (% r3) SEPARATOR \
505
+ stw % r0, 4 (% r4) SEPARATOR \
506
+ lwz % r0, 424 +_index*16 +8 (% r3) SEPARATOR \
507
+ stw % r0, 8 (% r4) SEPARATOR \
508
+ lwz % r0, 424 +_index*16 +12 (% r3) SEPARATOR \
509
+ stw % r0, 12 (% r4) SEPARATOR \
510
+ lvx % v ## _index, 0, % r4 SEPARATOR \
511
+ Ldone ## _index:
512
512
513
513
514
514
LOAD_VECTOR_UNALIGNEDl(0 )
@@ -545,17 +545,17 @@ Ldone ## _index:
545
545
LOAD_VECTOR_UNALIGNEDh(31 )
546
546
547
547
Lnovec:
548
- lwz r0, 136 (r3) ; __cr
549
- mtocrf 255 , r0
550
- lwz r0, 148 (r3) ; __ctr
551
- mtctr r0
552
- lwz r0, 0 ( r3) ; __ssr0
553
- mtctr r0
554
- lwz r0, 8 ( r3) ; do r0 now
555
- lwz r5,28 (r3) ; do r5 now
556
- lwz r4,24 (r3) ; do r4 now
557
- lwz r1,12 (r3) ; do sp now
558
- lwz r3,20 (r3) ; do r3 last
548
+ lwz % r0, 136 (% r3) // __cr
549
+ mtcr % r0
550
+ lwz % r0, 148 (% r3) // __ctr
551
+ mtctr % r0
552
+ lwz % r0, 0 (% r3) // __ssr0
553
+ mtctr % r0
554
+ lwz % r0, 8 (% r3) // do r0 now
555
+ lwz % r5, 28 (% r3) // do r5 now
556
+ lwz % r4, 24 (% r3) // do r4 now
557
+ lwz % r1, 12 (% r3) // do sp now
558
+ lwz % r3, 20 (% r3) // do r3 last
559
559
bctr
560
560
561
561
#elif defined(__arm64__) || defined(__aarch64__)
0 commit comments