Skip to content

Commit 3bbed4e

Browse files
committed
[X86][MC] Remove duplicated code in getX86SubSuperRegister by using macros, NFCI
1 parent 52848d0 commit 3bbed4e

File tree

1 file changed

+102
-142
lines changed

1 file changed

+102
-142
lines changed

llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp

Lines changed: 102 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -759,165 +759,125 @@ extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeX86TargetMC() {
759759

760760
MCRegister llvm::getX86SubSuperRegister(MCRegister Reg, unsigned Size,
761761
bool High) {
762+
#define DEFAULT_NOREG \
763+
default: \
764+
return X86::NoRegister;
765+
#define SUB_SUPER(R1, R2, R3, R4, R) \
766+
case X86::R1: \
767+
case X86::R2: \
768+
case X86::R3: \
769+
case X86::R4: \
770+
return X86::R;
771+
#define A_SUB_SUPER(R) \
772+
case X86::AH: \
773+
SUB_SUPER(AL, AX, EAX, RAX, R)
774+
#define D_SUB_SUPER(R) \
775+
case X86::DH: \
776+
SUB_SUPER(DL, DX, EDX, RDX, R)
777+
#define C_SUB_SUPER(R) \
778+
case X86::CH: \
779+
SUB_SUPER(CL, CX, ECX, RCX, R)
780+
#define B_SUB_SUPER(R) \
781+
case X86::BH: \
782+
SUB_SUPER(BL, BX, EBX, RBX, R)
783+
#define SI_SUB_SUPER(R) SUB_SUPER(SIL, SI, ESI, RSI, R)
784+
#define DI_SUB_SUPER(R) SUB_SUPER(DIL, DI, EDI, RDI, R)
785+
#define BP_SUB_SUPER(R) SUB_SUPER(BPL, BP, EBP, RBP, R)
786+
#define SP_SUB_SUPER(R) SUB_SUPER(SPL, SP, ESP, RSP, R)
787+
#define NO_SUB_SUPER(NO, REG) \
788+
SUB_SUPER(R##NO##B, R##NO##W, R##NO##D, R##NO, REG)
762789
switch (Size) {
763-
default: llvm_unreachable("illegal register size");
790+
default:
791+
llvm_unreachable("illegal register size");
764792
case 8:
765793
if (High) {
766794
switch (Reg.id()) {
767-
default: return X86::NoRegister;
768-
case X86::AH: case X86::AL: case X86::AX: case X86::EAX: case X86::RAX:
769-
return X86::AH;
770-
case X86::DH: case X86::DL: case X86::DX: case X86::EDX: case X86::RDX:
771-
return X86::DH;
772-
case X86::CH: case X86::CL: case X86::CX: case X86::ECX: case X86::RCX:
773-
return X86::CH;
774-
case X86::BH: case X86::BL: case X86::BX: case X86::EBX: case X86::RBX:
775-
return X86::BH;
795+
DEFAULT_NOREG
796+
A_SUB_SUPER(AH)
797+
D_SUB_SUPER(DH)
798+
C_SUB_SUPER(CH)
799+
B_SUB_SUPER(BH)
776800
}
777801
} else {
778802
switch (Reg.id()) {
779-
default: return X86::NoRegister;
780-
case X86::AH: case X86::AL: case X86::AX: case X86::EAX: case X86::RAX:
781-
return X86::AL;
782-
case X86::DH: case X86::DL: case X86::DX: case X86::EDX: case X86::RDX:
783-
return X86::DL;
784-
case X86::CH: case X86::CL: case X86::CX: case X86::ECX: case X86::RCX:
785-
return X86::CL;
786-
case X86::BH: case X86::BL: case X86::BX: case X86::EBX: case X86::RBX:
787-
return X86::BL;
788-
case X86::SIL: case X86::SI: case X86::ESI: case X86::RSI:
789-
return X86::SIL;
790-
case X86::DIL: case X86::DI: case X86::EDI: case X86::RDI:
791-
return X86::DIL;
792-
case X86::BPL: case X86::BP: case X86::EBP: case X86::RBP:
793-
return X86::BPL;
794-
case X86::SPL: case X86::SP: case X86::ESP: case X86::RSP:
795-
return X86::SPL;
796-
case X86::R8B: case X86::R8W: case X86::R8D: case X86::R8:
797-
return X86::R8B;
798-
case X86::R9B: case X86::R9W: case X86::R9D: case X86::R9:
799-
return X86::R9B;
800-
case X86::R10B: case X86::R10W: case X86::R10D: case X86::R10:
801-
return X86::R10B;
802-
case X86::R11B: case X86::R11W: case X86::R11D: case X86::R11:
803-
return X86::R11B;
804-
case X86::R12B: case X86::R12W: case X86::R12D: case X86::R12:
805-
return X86::R12B;
806-
case X86::R13B: case X86::R13W: case X86::R13D: case X86::R13:
807-
return X86::R13B;
808-
case X86::R14B: case X86::R14W: case X86::R14D: case X86::R14:
809-
return X86::R14B;
810-
case X86::R15B: case X86::R15W: case X86::R15D: case X86::R15:
811-
return X86::R15B;
803+
DEFAULT_NOREG
804+
A_SUB_SUPER(AL)
805+
D_SUB_SUPER(DL)
806+
C_SUB_SUPER(CL)
807+
B_SUB_SUPER(BL)
808+
SI_SUB_SUPER(SIL)
809+
DI_SUB_SUPER(DIL)
810+
BP_SUB_SUPER(BPL)
811+
SP_SUB_SUPER(SPL)
812+
NO_SUB_SUPER(8, R8B)
813+
NO_SUB_SUPER(9, R9B)
814+
NO_SUB_SUPER(10, R10B)
815+
NO_SUB_SUPER(11, R11B)
816+
NO_SUB_SUPER(12, R12B)
817+
NO_SUB_SUPER(13, R13B)
818+
NO_SUB_SUPER(14, R14B)
819+
NO_SUB_SUPER(15, R15B)
812820
}
813821
}
814822
case 16:
815823
switch (Reg.id()) {
816-
default: return X86::NoRegister;
817-
case X86::AH: case X86::AL: case X86::AX: case X86::EAX: case X86::RAX:
818-
return X86::AX;
819-
case X86::DH: case X86::DL: case X86::DX: case X86::EDX: case X86::RDX:
820-
return X86::DX;
821-
case X86::CH: case X86::CL: case X86::CX: case X86::ECX: case X86::RCX:
822-
return X86::CX;
823-
case X86::BH: case X86::BL: case X86::BX: case X86::EBX: case X86::RBX:
824-
return X86::BX;
825-
case X86::SIL: case X86::SI: case X86::ESI: case X86::RSI:
826-
return X86::SI;
827-
case X86::DIL: case X86::DI: case X86::EDI: case X86::RDI:
828-
return X86::DI;
829-
case X86::BPL: case X86::BP: case X86::EBP: case X86::RBP:
830-
return X86::BP;
831-
case X86::SPL: case X86::SP: case X86::ESP: case X86::RSP:
832-
return X86::SP;
833-
case X86::R8B: case X86::R8W: case X86::R8D: case X86::R8:
834-
return X86::R8W;
835-
case X86::R9B: case X86::R9W: case X86::R9D: case X86::R9:
836-
return X86::R9W;
837-
case X86::R10B: case X86::R10W: case X86::R10D: case X86::R10:
838-
return X86::R10W;
839-
case X86::R11B: case X86::R11W: case X86::R11D: case X86::R11:
840-
return X86::R11W;
841-
case X86::R12B: case X86::R12W: case X86::R12D: case X86::R12:
842-
return X86::R12W;
843-
case X86::R13B: case X86::R13W: case X86::R13D: case X86::R13:
844-
return X86::R13W;
845-
case X86::R14B: case X86::R14W: case X86::R14D: case X86::R14:
846-
return X86::R14W;
847-
case X86::R15B: case X86::R15W: case X86::R15D: case X86::R15:
848-
return X86::R15W;
824+
DEFAULT_NOREG
825+
A_SUB_SUPER(AX)
826+
D_SUB_SUPER(DX)
827+
C_SUB_SUPER(CX)
828+
B_SUB_SUPER(BX)
829+
SI_SUB_SUPER(SI)
830+
DI_SUB_SUPER(DI)
831+
BP_SUB_SUPER(BP)
832+
SP_SUB_SUPER(SP)
833+
NO_SUB_SUPER(8, R8W)
834+
NO_SUB_SUPER(9, R9W)
835+
NO_SUB_SUPER(10, R10W)
836+
NO_SUB_SUPER(11, R11W)
837+
NO_SUB_SUPER(12, R12W)
838+
NO_SUB_SUPER(13, R13W)
839+
NO_SUB_SUPER(14, R14W)
840+
NO_SUB_SUPER(15, R15W)
849841
}
850842
case 32:
851843
switch (Reg.id()) {
852-
default: return X86::NoRegister;
853-
case X86::AH: case X86::AL: case X86::AX: case X86::EAX: case X86::RAX:
854-
return X86::EAX;
855-
case X86::DH: case X86::DL: case X86::DX: case X86::EDX: case X86::RDX:
856-
return X86::EDX;
857-
case X86::CH: case X86::CL: case X86::CX: case X86::ECX: case X86::RCX:
858-
return X86::ECX;
859-
case X86::BH: case X86::BL: case X86::BX: case X86::EBX: case X86::RBX:
860-
return X86::EBX;
861-
case X86::SIL: case X86::SI: case X86::ESI: case X86::RSI:
862-
return X86::ESI;
863-
case X86::DIL: case X86::DI: case X86::EDI: case X86::RDI:
864-
return X86::EDI;
865-
case X86::BPL: case X86::BP: case X86::EBP: case X86::RBP:
866-
return X86::EBP;
867-
case X86::SPL: case X86::SP: case X86::ESP: case X86::RSP:
868-
return X86::ESP;
869-
case X86::R8B: case X86::R8W: case X86::R8D: case X86::R8:
870-
return X86::R8D;
871-
case X86::R9B: case X86::R9W: case X86::R9D: case X86::R9:
872-
return X86::R9D;
873-
case X86::R10B: case X86::R10W: case X86::R10D: case X86::R10:
874-
return X86::R10D;
875-
case X86::R11B: case X86::R11W: case X86::R11D: case X86::R11:
876-
return X86::R11D;
877-
case X86::R12B: case X86::R12W: case X86::R12D: case X86::R12:
878-
return X86::R12D;
879-
case X86::R13B: case X86::R13W: case X86::R13D: case X86::R13:
880-
return X86::R13D;
881-
case X86::R14B: case X86::R14W: case X86::R14D: case X86::R14:
882-
return X86::R14D;
883-
case X86::R15B: case X86::R15W: case X86::R15D: case X86::R15:
884-
return X86::R15D;
844+
DEFAULT_NOREG
845+
A_SUB_SUPER(EAX)
846+
D_SUB_SUPER(EDX)
847+
C_SUB_SUPER(ECX)
848+
B_SUB_SUPER(EBX)
849+
SI_SUB_SUPER(ESI)
850+
DI_SUB_SUPER(EDI)
851+
BP_SUB_SUPER(EBP)
852+
SP_SUB_SUPER(ESP)
853+
NO_SUB_SUPER(8, R8D)
854+
NO_SUB_SUPER(9, R9D)
855+
NO_SUB_SUPER(10, R10D)
856+
NO_SUB_SUPER(11, R11D)
857+
NO_SUB_SUPER(12, R12D)
858+
NO_SUB_SUPER(13, R13D)
859+
NO_SUB_SUPER(14, R14D)
860+
NO_SUB_SUPER(15, R15D)
885861
}
886862
case 64:
887863
switch (Reg.id()) {
888-
default: return X86::NoRegister;
889-
case X86::AH: case X86::AL: case X86::AX: case X86::EAX: case X86::RAX:
890-
return X86::RAX;
891-
case X86::DH: case X86::DL: case X86::DX: case X86::EDX: case X86::RDX:
892-
return X86::RDX;
893-
case X86::CH: case X86::CL: case X86::CX: case X86::ECX: case X86::RCX:
894-
return X86::RCX;
895-
case X86::BH: case X86::BL: case X86::BX: case X86::EBX: case X86::RBX:
896-
return X86::RBX;
897-
case X86::SIL: case X86::SI: case X86::ESI: case X86::RSI:
898-
return X86::RSI;
899-
case X86::DIL: case X86::DI: case X86::EDI: case X86::RDI:
900-
return X86::RDI;
901-
case X86::BPL: case X86::BP: case X86::EBP: case X86::RBP:
902-
return X86::RBP;
903-
case X86::SPL: case X86::SP: case X86::ESP: case X86::RSP:
904-
return X86::RSP;
905-
case X86::R8B: case X86::R8W: case X86::R8D: case X86::R8:
906-
return X86::R8;
907-
case X86::R9B: case X86::R9W: case X86::R9D: case X86::R9:
908-
return X86::R9;
909-
case X86::R10B: case X86::R10W: case X86::R10D: case X86::R10:
910-
return X86::R10;
911-
case X86::R11B: case X86::R11W: case X86::R11D: case X86::R11:
912-
return X86::R11;
913-
case X86::R12B: case X86::R12W: case X86::R12D: case X86::R12:
914-
return X86::R12;
915-
case X86::R13B: case X86::R13W: case X86::R13D: case X86::R13:
916-
return X86::R13;
917-
case X86::R14B: case X86::R14W: case X86::R14D: case X86::R14:
918-
return X86::R14;
919-
case X86::R15B: case X86::R15W: case X86::R15D: case X86::R15:
920-
return X86::R15;
864+
DEFAULT_NOREG
865+
A_SUB_SUPER(RAX)
866+
D_SUB_SUPER(RDX)
867+
C_SUB_SUPER(RCX)
868+
B_SUB_SUPER(RBX)
869+
SI_SUB_SUPER(RSI)
870+
DI_SUB_SUPER(RDI)
871+
BP_SUB_SUPER(RBP)
872+
SP_SUB_SUPER(RSP)
873+
NO_SUB_SUPER(8, R8)
874+
NO_SUB_SUPER(9, R9)
875+
NO_SUB_SUPER(10, R10)
876+
NO_SUB_SUPER(11, R11)
877+
NO_SUB_SUPER(12, R12)
878+
NO_SUB_SUPER(13, R13)
879+
NO_SUB_SUPER(14, R14)
880+
NO_SUB_SUPER(15, R15)
921881
}
922882
}
923883
}

0 commit comments

Comments
 (0)