mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 20:29:48 +00:00
macros -> Inline functions
Lauros's patch git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32656 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1bd82a5c65
commit
3ef39ca6a1
@ -35,9 +35,13 @@ static bool hasFP(const MachineFunction &MF) {
|
||||
return NoFramePointerElim || MFI->hasVarSizedObjects();
|
||||
}
|
||||
|
||||
#define ROTATE32L(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
|
||||
static inline unsigned rotateL(unsigned x, unsigned n){
|
||||
return ((x << n) | (x >> (32 - n)));
|
||||
}
|
||||
|
||||
#define ROTATE32R(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
|
||||
static inline unsigned rotateR(unsigned x, unsigned n){
|
||||
return ((x >> n) | (x << (32 - n)));
|
||||
}
|
||||
|
||||
// finds the end position of largest sequence of zeros in binary representation
|
||||
// of 'immediate'.
|
||||
@ -50,19 +54,19 @@ static int findLargestZeroSequence(unsigned immediate){
|
||||
int end_pos;
|
||||
|
||||
while ((immediate & 0x3) == 0) {
|
||||
immediate = ROTATE32R(immediate, 2);
|
||||
immediate = rotateR(immediate, 2);
|
||||
pos+=2;
|
||||
}
|
||||
end_pos = pos+32;
|
||||
|
||||
while (pos<end_pos){
|
||||
while ((immediate & 0x3) != 0) {
|
||||
immediate = ROTATE32R(immediate, 2);
|
||||
immediate = rotateR(immediate, 2);
|
||||
pos+=2;
|
||||
}
|
||||
zero_pos = pos;
|
||||
while ((immediate & 0x3) == 0) {
|
||||
immediate = ROTATE32R(immediate, 2);
|
||||
immediate = rotateR(immediate, 2);
|
||||
pos+=2;
|
||||
}
|
||||
zero_length = pos - zero_pos;
|
||||
@ -90,19 +94,19 @@ static void splitInstructionWithImmediate(MachineBasicBlock &BB,
|
||||
}
|
||||
|
||||
int start_pos = findLargestZeroSequence(immediate);
|
||||
unsigned immediate_tmp = ROTATE32R(immediate, start_pos);
|
||||
unsigned immediate_tmp = rotateR(immediate, start_pos);
|
||||
|
||||
int pos = 0;
|
||||
while (pos < 32){
|
||||
while(((immediate_tmp&0x3) == 0)&&(pos<32)){
|
||||
immediate_tmp = ROTATE32R(immediate_tmp,2);
|
||||
immediate_tmp = rotateR(immediate_tmp,2);
|
||||
pos+=2;
|
||||
}
|
||||
if (pos < 32){
|
||||
BuildMI(BB, I, TID, DestReg).addReg(OrigReg)
|
||||
.addImm(ROTATE32L(immediate_tmp&0xFF, (start_pos + pos) % 32 ))
|
||||
.addImm(rotateL(immediate_tmp&0xFF, (start_pos + pos) % 32 ))
|
||||
.addImm(0).addImm(ARMShift::LSL);
|
||||
immediate_tmp = ROTATE32R(immediate_tmp,8);
|
||||
immediate_tmp = rotateR(immediate_tmp,8);
|
||||
pos+=8;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user