@@ -3553,29 +3553,97 @@ bool AArch64InstrInfo::getMemOpInfo(unsigned Opcode, TypeSize &Scale,
3553
3553
Width = TypeSize::getFixed (0 );
3554
3554
MinOffset = MaxOffset = 0 ;
3555
3555
return false ;
3556
+ // LDR / STR
3557
+ case AArch64::LDRQui:
3558
+ case AArch64::STRQui:
3559
+ Scale = TypeSize::getFixed (16 );
3560
+ Width = TypeSize::getFixed (16 );
3561
+ MinOffset = 0 ;
3562
+ MaxOffset = 4095 ;
3563
+ break ;
3564
+ case AArch64::LDRXui:
3565
+ case AArch64::LDRDui:
3566
+ case AArch64::STRXui:
3567
+ case AArch64::STRDui:
3568
+ case AArch64::PRFMui:
3569
+ Scale = TypeSize::getFixed (8 );
3570
+ Width = TypeSize::getFixed (8 );
3571
+ MinOffset = 0 ;
3572
+ MaxOffset = 4095 ;
3573
+ break ;
3574
+ case AArch64::LDRWui:
3575
+ case AArch64::LDRSui:
3576
+ case AArch64::LDRSWui:
3577
+ case AArch64::STRWui:
3578
+ case AArch64::STRSui:
3579
+ Scale = TypeSize::getFixed (4 );
3580
+ Width = TypeSize::getFixed (4 );
3581
+ MinOffset = 0 ;
3582
+ MaxOffset = 4095 ;
3583
+ break ;
3584
+ case AArch64::LDRHui:
3585
+ case AArch64::LDRHHui:
3586
+ case AArch64::LDRSHWui:
3587
+ case AArch64::LDRSHXui:
3588
+ case AArch64::STRHui:
3589
+ case AArch64::STRHHui:
3590
+ Scale = TypeSize::getFixed (2 );
3591
+ Width = TypeSize::getFixed (2 );
3592
+ MinOffset = 0 ;
3593
+ MaxOffset = 4095 ;
3594
+ break ;
3595
+ case AArch64::LDRBui:
3596
+ case AArch64::LDRBBui:
3597
+ case AArch64::LDRSBWui:
3598
+ case AArch64::LDRSBXui:
3599
+ case AArch64::STRBui:
3600
+ case AArch64::STRBBui:
3601
+ Scale = TypeSize::getFixed (1 );
3602
+ Width = TypeSize::getFixed (1 );
3603
+ MinOffset = 0 ;
3604
+ MaxOffset = 4095 ;
3605
+ break ;
3606
+ // post/pre inc
3607
+ case AArch64::STRQpre:
3608
+ case AArch64::LDRQpost:
3609
+ Scale = TypeSize::getFixed (1 );
3610
+ Width = TypeSize::getFixed (16 );
3611
+ MinOffset = -256 ;
3612
+ MaxOffset = 255 ;
3613
+ break ;
3614
+ case AArch64::STRXpre:
3615
+ case AArch64::STRDpre:
3616
+ case AArch64::LDRXpost:
3617
+ case AArch64::LDRDpost:
3618
+ Scale = TypeSize::getFixed (1 );
3619
+ Width = TypeSize::getFixed (8 );
3620
+ MinOffset = -256 ;
3621
+ MaxOffset = 255 ;
3622
+ break ;
3556
3623
case AArch64::STRWpost:
3557
3624
case AArch64::LDRWpost:
3558
- Width = TypeSize::getFixed (32 );
3559
3625
Scale = TypeSize::getFixed (4 );
3626
+ Width = TypeSize::getFixed (32 );
3560
3627
MinOffset = -256 ;
3561
3628
MaxOffset = 255 ;
3562
3629
break ;
3630
+ // Unscaled
3563
3631
case AArch64::LDURQi:
3564
3632
case AArch64::STURQi:
3565
- Width = TypeSize::getFixed (16 );
3566
3633
Scale = TypeSize::getFixed (1 );
3634
+ Width = TypeSize::getFixed (16 );
3567
3635
MinOffset = -256 ;
3568
3636
MaxOffset = 255 ;
3569
3637
break ;
3570
- case AArch64::PRFUMi:
3571
3638
case AArch64::LDURXi:
3572
3639
case AArch64::LDURDi:
3573
3640
case AArch64::LDAPURXi:
3574
3641
case AArch64::STURXi:
3575
3642
case AArch64::STURDi:
3576
3643
case AArch64::STLURXi:
3577
- Width = TypeSize::getFixed ( 8 );
3644
+ case AArch64::PRFUMi:
3578
3645
Scale = TypeSize::getFixed (1 );
3646
+ Width = TypeSize::getFixed (8 );
3579
3647
MinOffset = -256 ;
3580
3648
MaxOffset = 255 ;
3581
3649
break ;
@@ -3587,8 +3655,8 @@ bool AArch64InstrInfo::getMemOpInfo(unsigned Opcode, TypeSize &Scale,
3587
3655
case AArch64::STURWi:
3588
3656
case AArch64::STURSi:
3589
3657
case AArch64::STLURWi:
3590
- Width = TypeSize::getFixed (4 );
3591
3658
Scale = TypeSize::getFixed (1 );
3659
+ Width = TypeSize::getFixed (4 );
3592
3660
MinOffset = -256 ;
3593
3661
MaxOffset = 255 ;
3594
3662
break ;
@@ -3602,8 +3670,8 @@ bool AArch64InstrInfo::getMemOpInfo(unsigned Opcode, TypeSize &Scale,
3602
3670
case AArch64::STURHi:
3603
3671
case AArch64::STURHHi:
3604
3672
case AArch64::STLURHi:
3605
- Width = TypeSize::getFixed (2 );
3606
3673
Scale = TypeSize::getFixed (1 );
3674
+ Width = TypeSize::getFixed (2 );
3607
3675
MinOffset = -256 ;
3608
3676
MaxOffset = 255 ;
3609
3677
break ;
@@ -3617,11 +3685,12 @@ bool AArch64InstrInfo::getMemOpInfo(unsigned Opcode, TypeSize &Scale,
3617
3685
case AArch64::STURBi:
3618
3686
case AArch64::STURBBi:
3619
3687
case AArch64::STLURBi:
3620
- Width = TypeSize::getFixed (1 );
3621
3688
Scale = TypeSize::getFixed (1 );
3689
+ Width = TypeSize::getFixed (1 );
3622
3690
MinOffset = -256 ;
3623
3691
MaxOffset = 255 ;
3624
3692
break ;
3693
+ // LDP / STP
3625
3694
case AArch64::LDPQi:
3626
3695
case AArch64::LDNPQi:
3627
3696
case AArch64::STPQi:
@@ -3631,13 +3700,6 @@ bool AArch64InstrInfo::getMemOpInfo(unsigned Opcode, TypeSize &Scale,
3631
3700
MinOffset = -64 ;
3632
3701
MaxOffset = 63 ;
3633
3702
break ;
3634
- case AArch64::LDRQui:
3635
- case AArch64::STRQui:
3636
- Scale = TypeSize::getFixed (16 );
3637
- Width = TypeSize::getFixed (16 );
3638
- MinOffset = 0 ;
3639
- MaxOffset = 4095 ;
3640
- break ;
3641
3703
case AArch64::LDPXi:
3642
3704
case AArch64::LDPDi:
3643
3705
case AArch64::LDNPXi:
@@ -3651,23 +3713,6 @@ bool AArch64InstrInfo::getMemOpInfo(unsigned Opcode, TypeSize &Scale,
3651
3713
MinOffset = -64 ;
3652
3714
MaxOffset = 63 ;
3653
3715
break ;
3654
- case AArch64::PRFMui:
3655
- case AArch64::LDRXui:
3656
- case AArch64::LDRDui:
3657
- case AArch64::STRXui:
3658
- case AArch64::STRDui:
3659
- Scale = TypeSize::getFixed (8 );
3660
- Width = TypeSize::getFixed (8 );
3661
- MinOffset = 0 ;
3662
- MaxOffset = 4095 ;
3663
- break ;
3664
- case AArch64::StoreSwiftAsyncContext:
3665
- // Store is an STRXui, but there might be an ADDXri in the expansion too.
3666
- Scale = TypeSize::getFixed (1 );
3667
- Width = TypeSize::getFixed (8 );
3668
- MinOffset = 0 ;
3669
- MaxOffset = 4095 ;
3670
- break ;
3671
3716
case AArch64::LDPWi:
3672
3717
case AArch64::LDPSi:
3673
3718
case AArch64::LDNPWi:
@@ -3681,37 +3726,13 @@ bool AArch64InstrInfo::getMemOpInfo(unsigned Opcode, TypeSize &Scale,
3681
3726
MinOffset = -64 ;
3682
3727
MaxOffset = 63 ;
3683
3728
break ;
3684
- case AArch64::LDRWui:
3685
- case AArch64::LDRSui:
3686
- case AArch64::LDRSWui:
3687
- case AArch64::STRWui:
3688
- case AArch64::STRSui:
3689
- Scale = TypeSize::getFixed (4 );
3690
- Width = TypeSize::getFixed (4 );
3691
- MinOffset = 0 ;
3692
- MaxOffset = 4095 ;
3693
- break ;
3694
- case AArch64::LDRHui:
3695
- case AArch64::LDRHHui:
3696
- case AArch64::LDRSHWui:
3697
- case AArch64::LDRSHXui:
3698
- case AArch64::STRHui:
3699
- case AArch64::STRHHui:
3700
- Scale = TypeSize::getFixed (2 );
3701
- Width = TypeSize::getFixed (2 );
3702
- MinOffset = 0 ;
3703
- MaxOffset = 4095 ;
3704
- break ;
3705
- case AArch64::LDRBui:
3706
- case AArch64::LDRBBui:
3707
- case AArch64::LDRSBWui:
3708
- case AArch64::LDRSBXui:
3709
- case AArch64::STRBui:
3710
- case AArch64::STRBBui:
3711
- Scale = TypeSize::getFixed (1 );
3712
- Width = TypeSize::getFixed (1 );
3713
- MinOffset = 0 ;
3714
- MaxOffset = 4095 ;
3729
+ // pre/post inc
3730
+ case AArch64::STPQpre:
3731
+ case AArch64::LDPQpost:
3732
+ Scale = TypeSize::getFixed (16 );
3733
+ Width = TypeSize::getFixed (16 );
3734
+ MinOffset = -1024 ;
3735
+ MaxOffset = 1008 ;
3715
3736
break ;
3716
3737
case AArch64::STPXpre:
3717
3738
case AArch64::LDPXpost:
@@ -3722,28 +3743,12 @@ bool AArch64InstrInfo::getMemOpInfo(unsigned Opcode, TypeSize &Scale,
3722
3743
MinOffset = -512 ;
3723
3744
MaxOffset = 504 ;
3724
3745
break ;
3725
- case AArch64::STPQpre:
3726
- case AArch64::LDPQpost:
3727
- Scale = TypeSize::getFixed (16 );
3728
- Width = TypeSize::getFixed (16 );
3729
- MinOffset = -1024 ;
3730
- MaxOffset = 1008 ;
3731
- break ;
3732
- case AArch64::STRXpre:
3733
- case AArch64::STRDpre:
3734
- case AArch64::LDRXpost:
3735
- case AArch64::LDRDpost:
3746
+ case AArch64::StoreSwiftAsyncContext:
3747
+ // Store is an STRXui, but there might be an ADDXri in the expansion too.
3736
3748
Scale = TypeSize::getFixed (1 );
3737
3749
Width = TypeSize::getFixed (8 );
3738
- MinOffset = -256 ;
3739
- MaxOffset = 255 ;
3740
- break ;
3741
- case AArch64::STRQpre:
3742
- case AArch64::LDRQpost:
3743
- Scale = TypeSize::getFixed (1 );
3744
- Width = TypeSize::getFixed (16 );
3745
- MinOffset = -256 ;
3746
- MaxOffset = 255 ;
3750
+ MinOffset = 0 ;
3751
+ MaxOffset = 4095 ;
3747
3752
break ;
3748
3753
case AArch64::ADDG:
3749
3754
Scale = TypeSize::getFixed (16 );
@@ -3767,6 +3772,7 @@ bool AArch64InstrInfo::getMemOpInfo(unsigned Opcode, TypeSize &Scale,
3767
3772
MinOffset = -256 ;
3768
3773
MaxOffset = 255 ;
3769
3774
break ;
3775
+ // SVE
3770
3776
case AArch64::STR_ZZZZXI:
3771
3777
case AArch64::LDR_ZZZZXI:
3772
3778
Scale = TypeSize::getScalable (16 );
0 commit comments