Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 4 additions & 55 deletions core/src/core/org/jnode/assembler/x86/X86BinaryAssembler.java
Original file line number Diff line number Diff line change
Expand Up @@ -624,7 +624,6 @@ public final Collection<ObjectRef> getUnresolvedObjectRefs() {
}
}
}
System.out.println("getUnresolvedObjectsRefs: count=" + result.size());
return result;
}

Expand Down Expand Up @@ -2272,8 +2271,8 @@ public final void writeJECXZ(Label label) {
} else {
try {
throw new IllegalArgumentException("Invalid jump distance: " + (ref.getOffset() - shortOffset));
} catch (UnresolvedObjectRefException rex) {
throw new RuntimeException(rex);
} catch (UnresolvedObjectRefException ex) {
throw new RuntimeException(ex);
}
}
} else {
Expand Down Expand Up @@ -2463,58 +2462,8 @@ public final void writeLDMXCSR(GPR srcReg, int disp) {
public final void writeLEA(GPR dstReg, GPR srcReg, int disp) {
testSize(dstReg, mode.getSize());
testSize(srcReg, mode.getSize());
//write1bOpcodeModRM(0x8d, dstReg.getSize(), srcReg, disp, dstReg.getNr());

//TODO review
//private final void write1bOpcodeModRM(int opcode, int operandSize, GPR rm, int disp, int reg)
if (true) {
int opcode = 0x8d;
int operandSize = dstReg.getSize();
GPR rm = srcReg;
int reg = dstReg.getNr();

writeModRMRREXPrefix(operandSize, rm, reg);
write8(opcode);


//writeModRM(rm.getNr() & 7, disp, reg & 7);
}

//private final void writeModRM(int rm, int disp, int reg) {

int rm = srcReg.getNr() & 7;
int reg = dstReg.getNr() & 7;
if ((rm < 0) || (rm > 7)) {
throw new IllegalArgumentException("rm");
}
if ((reg < 0) || (reg > 7)) {
throw new IllegalArgumentException("reg");
}
if (rm == X86Register.ESP.getNr()) {
if (disp == 0 && false) { //TODO review
write8(0x00 | (reg << 3) | rm);
write8(0x24);
} else if (isByte(disp)) {
write8(0x40 | (reg << 3) | rm);
write8(0x24);
write8(disp);
} else {
write8(0x80 | (reg << 3) | rm);
write8(0x24);
write32(disp);
}
} else {
if ((disp == 0) && (rm != X86Register.EBP.getNr()) && false) { //TODO review
write8(0x00 | (reg << 3) | rm);
} else if (isByte(disp)) {
write8(0x40 | (reg << 3) | rm);
write8(disp);
} else {
write8(0x80 | (reg << 3) | rm);
write32(disp);
}
}
//}
writeModRMRREXPrefix(dstReg.getSize(), srcReg, dstReg.getNr());
write8(0x8d);
}

/**
Expand Down
Loading