Skip to content

Commit

Permalink
[MN1610] Disassemble relative addressing simple as absolute
Browse files Browse the repository at this point in the history
  • Loading branch information
tgtakaoka committed Jan 23, 2025
1 parent 065fa69 commit 5f823be
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 10 deletions.
7 changes: 1 addition & 6 deletions src/dis_mn1610.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,12 +71,7 @@ void DisMn1610::outGenericAddr(StrBuffer &out, Config::opcode_t opc, Config::uin
out.letter('(');
// Fall-through
case 1:
if (_relativeTarget) {
outRelAddr(out, target, base, 8);
} else {
outAbsAddr(out, target).letter('-').letter(_curSym);
outRegName(out.letter('('), REG_IC).letter(')');
}
outRelAddr(out, target, base, 8);
if (mode == 3)
out.letter(')');
break;
Expand Down
6 changes: 6 additions & 0 deletions test/test_asm_mn1610.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,17 +68,23 @@ void test_transfer() {
ERRT( "L R5, 0x10", OPERAND_NOT_ALLOWED, "R5, 0x10");
ERRT( "L X2, 0x10", OPERAND_NOT_ALLOWED, "X2, 0x10");
ATEST(0x1000, "L R2, *-128", 0xC000|(1<<11)|(2<<8)|0x80);
ATEST(0x1000, "L R2, 0x0F80", 0xC000|(1<<11)|(2<<8)|0x80);
ATEST(0x1000, "l r2, 0x0f80-*(ic)", 0xC000|(1<<11)|(2<<8)|0x80);
AERRT(0x1000, "L R2, *-129", OPERAND_TOO_FAR, "*-129", 0xC000|(1<<11)|(2<<8)|0x7F);
AERRT(0x1000, "L R2, 0x0F7F", OPERAND_TOO_FAR, "0x0F7F", 0xC000|(1<<11)|(2<<8)|0x7F);
AERRT(0x1000, "L R2, 0x0F7F-*(IC)", OPERAND_TOO_FAR, "0x0F7F-*(IC)", 0xC000|(1<<11)|(2<<8)|0x7F);
AERRT(0x1000, "L R2, *+128", OPERAND_TOO_FAR, "*+128", 0xC000|(1<<11)|(2<<8)|0x80);
AERRT(0x1000, "L R2, 0x1080", OPERAND_TOO_FAR, "0x1080", 0xC000|(1<<11)|(2<<8)|0x80);
AERRT(0x1000, "L R2, 0x1080-*(IC)", OPERAND_TOO_FAR, "0x1080-*(IC)", 0xC000|(1<<11)|(2<<8)|0x80);
TEST( "L R3, (0xFF)", 0xC000|(2<<11)|(3<<8)|0xFF);
ATEST(0x1000, "L R4, (*+127)", 0xC000|(3<<11)|(4<<8)|0x7F);
ATEST(0x1000, "L R4, (0x107F)", 0xC000|(3<<11)|(4<<8)|0x7F);
ATEST(0x1000, "L R4, (0x107F-*(IC))", 0xC000|(3<<11)|(4<<8)|0x7F);
AERRT(0x1000, "L R4, (*-129)", OPERAND_TOO_FAR, "(*-129)", 0xC000|(3<<11)|(4<<8)|0x7F);
AERRT(0x1000, "L R4, (0x0F7F)", OPERAND_TOO_FAR, "(0x0F7F)", 0xC000|(3<<11)|(4<<8)|0x7F);
AERRT(0x1000, "L R4, (0x0F7F-*(IC))", OPERAND_TOO_FAR, "(0x0F7F-*(IC))", 0xC000|(3<<11)|(4<<8)|0x7F);
AERRT(0x1000, "L R4, (*+128)", OPERAND_TOO_FAR, "(*+128)", 0xC000|(3<<11)|(4<<8)|0x80);
AERRT(0x1000, "L R4, (0x1080)", OPERAND_TOO_FAR, "(0x1080)", 0xC000|(3<<11)|(4<<8)|0x80);
AERRT(0x1000, "L R4, (0x1080-*(IC))", OPERAND_TOO_FAR, "(0x1080-*(IC))", 0xC000|(3<<11)|(4<<8)|0x80);
TEST( "L R0, 128(X0)", 0xC000|(4<<11)|(0<<8)|0x80);
TEST( "L SP, 255(X1)", 0xC000|(5<<11)|(5<<8)|0xFF);
Expand Down
8 changes: 4 additions & 4 deletions test/test_dis_mn1610.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -84,11 +84,11 @@ void test_transfer() {

disassembler.setOption("relative", "off");
if (is1610()) {
ATEST(0x1000, "L", "R2, X'0F80'-*(IC)", 0xC000|(1<<11)|(2<<8)|0x80);
ATEST(0x1000, "L", "R4, (X'107F'-*(IC))", 0xC000|(3<<11)|(4<<8)|0x7F);
ATEST(0x1000, "L", "R2, X'0F80'", 0xC000|(1<<11)|(2<<8)|0x80);
ATEST(0x1000, "L", "R4, (X'107F')", 0xC000|(3<<11)|(4<<8)|0x7F);
} else {
ATEST(0x1000, "L", "R2, X'00F80'-*(IC)", 0xC000|(1<<11)|(2<<8)|0x80);
ATEST(0x1000, "L", "R4, (X'0107F'-*(IC))", 0xC000|(3<<11)|(4<<8)|0x7F);
ATEST(0x1000, "L", "R2, X'00F80'", 0xC000|(1<<11)|(2<<8)|0x80);
ATEST(0x1000, "L", "R4, (X'0107F')", 0xC000|(3<<11)|(4<<8)|0x7F);
}
disassembler.setOption("relative", "enable");

Expand Down

0 comments on commit 5f823be

Please sign in to comment.