mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-03 13:31:05 +00:00
Functions in MipsCodeEmitter.cpp that expand unaligned loads/stores are dead
code. Removing it. Patch by Petar Jovanovic. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169174 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
fc29db1214
commit
25752e7be7
@ -112,12 +112,6 @@ class MipsCodeEmitter : public MachineFunctionPass {
|
||||
unsigned getSizeExtEncoding(const MachineInstr &MI, unsigned OpNo) const;
|
||||
unsigned getSizeInsEncoding(const MachineInstr &MI, unsigned OpNo) const;
|
||||
|
||||
int emitULW(const MachineInstr &MI);
|
||||
int emitUSW(const MachineInstr &MI);
|
||||
int emitULH(const MachineInstr &MI);
|
||||
int emitULHu(const MachineInstr &MI);
|
||||
int emitUSH(const MachineInstr &MI);
|
||||
|
||||
void emitGlobalAddressUnaligned(const GlobalValue *GV, unsigned Reloc,
|
||||
int Offset) const;
|
||||
};
|
||||
@ -271,103 +265,6 @@ void MipsCodeEmitter::emitMachineBasicBlock(MachineBasicBlock *BB,
|
||||
Reloc, BB));
|
||||
}
|
||||
|
||||
int MipsCodeEmitter::emitUSW(const MachineInstr &MI) {
|
||||
unsigned src = getMachineOpValue(MI, MI.getOperand(0));
|
||||
unsigned base = getMachineOpValue(MI, MI.getOperand(1));
|
||||
unsigned offset = getMachineOpValue(MI, MI.getOperand(2));
|
||||
// swr src, offset(base)
|
||||
// swl src, offset+3(base)
|
||||
MCE.emitWordLE(
|
||||
(0x2e << 26) | (base << 21) | (src << 16) | (offset & 0xffff));
|
||||
MCE.emitWordLE(
|
||||
(0x2a << 26) | (base << 21) | (src << 16) | ((offset+3) & 0xffff));
|
||||
return 2;
|
||||
}
|
||||
|
||||
int MipsCodeEmitter::emitULW(const MachineInstr &MI) {
|
||||
unsigned dst = getMachineOpValue(MI, MI.getOperand(0));
|
||||
unsigned base = getMachineOpValue(MI, MI.getOperand(1));
|
||||
unsigned offset = getMachineOpValue(MI, MI.getOperand(2));
|
||||
unsigned at = 1;
|
||||
if (dst != base) {
|
||||
// lwr dst, offset(base)
|
||||
// lwl dst, offset+3(base)
|
||||
MCE.emitWordLE(
|
||||
(0x26 << 26) | (base << 21) | (dst << 16) | (offset & 0xffff));
|
||||
MCE.emitWordLE(
|
||||
(0x22 << 26) | (base << 21) | (dst << 16) | ((offset+3) & 0xffff));
|
||||
return 2;
|
||||
} else {
|
||||
// lwr at, offset(base)
|
||||
// lwl at, offset+3(base)
|
||||
// addu dst, at, $zero
|
||||
MCE.emitWordLE(
|
||||
(0x26 << 26) | (base << 21) | (at << 16) | (offset & 0xffff));
|
||||
MCE.emitWordLE(
|
||||
(0x22 << 26) | (base << 21) | (at << 16) | ((offset+3) & 0xffff));
|
||||
MCE.emitWordLE(
|
||||
(0x0 << 26) | (at << 21) | (0x0 << 16) | (dst << 11) | (0x0 << 6) | 0x21);
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
|
||||
int MipsCodeEmitter::emitUSH(const MachineInstr &MI) {
|
||||
unsigned src = getMachineOpValue(MI, MI.getOperand(0));
|
||||
unsigned base = getMachineOpValue(MI, MI.getOperand(1));
|
||||
unsigned offset = getMachineOpValue(MI, MI.getOperand(2));
|
||||
unsigned at = 1;
|
||||
// sb src, offset(base)
|
||||
// srl at,src,8
|
||||
// sb at, offset+1(base)
|
||||
MCE.emitWordLE(
|
||||
(0x28 << 26) | (base << 21) | (src << 16) | (offset & 0xffff));
|
||||
MCE.emitWordLE(
|
||||
(0x0 << 26) | (0x0 << 21) | (src << 16) | (at << 11) | (0x8 << 6) | 0x2);
|
||||
MCE.emitWordLE(
|
||||
(0x28 << 26) | (base << 21) | (at << 16) | ((offset+1) & 0xffff));
|
||||
return 3;
|
||||
}
|
||||
|
||||
int MipsCodeEmitter::emitULH(const MachineInstr &MI) {
|
||||
unsigned dst = getMachineOpValue(MI, MI.getOperand(0));
|
||||
unsigned base = getMachineOpValue(MI, MI.getOperand(1));
|
||||
unsigned offset = getMachineOpValue(MI, MI.getOperand(2));
|
||||
unsigned at = 1;
|
||||
// lbu at, offset(base)
|
||||
// lb dst, offset+1(base)
|
||||
// sll dst,dst,8
|
||||
// or dst,dst,at
|
||||
MCE.emitWordLE(
|
||||
(0x24 << 26) | (base << 21) | (at << 16) | (offset & 0xffff));
|
||||
MCE.emitWordLE(
|
||||
(0x20 << 26) | (base << 21) | (dst << 16) | ((offset+1) & 0xffff));
|
||||
MCE.emitWordLE(
|
||||
(0x0 << 26) | (0x0 << 21) | (dst << 16) | (dst << 11) | (0x8 << 6) | 0x0);
|
||||
MCE.emitWordLE(
|
||||
(0x0 << 26) | (dst << 21) | (at << 16) | (dst << 11) | (0x0 << 6) | 0x25);
|
||||
return 4;
|
||||
}
|
||||
|
||||
int MipsCodeEmitter::emitULHu(const MachineInstr &MI) {
|
||||
unsigned dst = getMachineOpValue(MI, MI.getOperand(0));
|
||||
unsigned base = getMachineOpValue(MI, MI.getOperand(1));
|
||||
unsigned offset = getMachineOpValue(MI, MI.getOperand(2));
|
||||
unsigned at = 1;
|
||||
// lbu at, offset(base)
|
||||
// lbu dst, offset+1(base)
|
||||
// sll dst,dst,8
|
||||
// or dst,dst,at
|
||||
MCE.emitWordLE(
|
||||
(0x24 << 26) | (base << 21) | (at << 16) | (offset & 0xffff));
|
||||
MCE.emitWordLE(
|
||||
(0x24 << 26) | (base << 21) | (dst << 16) | ((offset+1) & 0xffff));
|
||||
MCE.emitWordLE(
|
||||
(0x0 << 26) | (0x0 << 21) | (dst << 16) | (dst << 11) | (0x8 << 6) | 0x0);
|
||||
MCE.emitWordLE(
|
||||
(0x0 << 26) | (dst << 21) | (at << 16) | (dst << 11) | (0x0 << 6) | 0x25);
|
||||
return 4;
|
||||
}
|
||||
|
||||
void MipsCodeEmitter::emitInstruction(const MachineInstr &MI) {
|
||||
DEBUG(errs() << "JIT: " << (void*)MCE.getCurrentPCValue() << ":\t" << MI);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user