summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2024-02-09 03:15:04 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2024-02-09 03:15:04 +0000
commit7ceee8eeadda4281966b019d9f9150c238fde4bf (patch)
tree9b32b549a48a4a3ebe2cfe4caa46294eefd20679
parentec9d69aebb0e4a420aa02b17f2f8cde08ae59146 (diff)
parentec19399b82c1a13a8811700c3ba064cc3f0b6a89 (diff)
downloadapf-aml_per_341614000.tar.gz
Snap for 11426876 from ec19399b82c1a13a8811700c3ba064cc3f0b6a89 to mainline-permission-releaseaml_per_341614000
Change-Id: I21e9d418c345b59e13189ec871cccde802728853
-rw-r--r--apf2java/apf2java.in2
-rw-r--r--apf2java/apf2java.out215
-rwxr-xr-xapf2java/apf2java.sh1
-rw-r--r--apf2java/apf2java.txt243
-rw-r--r--disassembler.c32
-rwxr-xr-xv5/apf_interpreter_assemble.sh2
6 files changed, 288 insertions, 207 deletions
diff --git a/apf2java/apf2java.in b/apf2java/apf2java.in
index e0b0733..e0fada2 100644
--- a/apf2java/apf2java.in
+++ b/apf2java/apf2java.in
@@ -1 +1 @@
-6bfcb03a01b8120c6b9494014a06006b907c014388a27c013e88a47c013988b87c013488cd7c012f88e17c012a88e384003f08066a0e6bdca40110000600010800060412147a1c016bd884010400021a1c6b8c7c01010000686bd4a2ef06ffffffffffff6a266bbca2ea04c0a801be6bf872e0120c84008d08000a17821e1112149c00171fffab0d2a108210446a3239a20406ea42226789c06bf472b60a1e52f06bac7ab3e06bb41a1e7e000000a6ffffffff6bb07e0000009bc0a801ff0a178230116a1aa223086b7a1f1fc0a801beaa0d3a08aa221210ab2139821501aa0d3a0ea20a041194ceca3a08a20401ff6b8072666be868a25406ffffffffffff6bb872566bf0724c7c001086dd686bd0a23b06ffffffffffff6bc8723d0a147a32007a0b3a6b980a267a2eff6be072240a366ba87a23858218886a26a2040fff02000000000000000000000000006ba472086be4b03a01b87206b03a01b87201
+6bf8b03a01b8120c6b8894023706006b847c023088a27c022b88a47c022688b87c022188cd7c021c88e17c021788e384004608066a0e6dff68a40202000600010800060412147a1f016dff648401f500021a1c6b807c01ec0000686bc8a401d80006ffffffffffff6a266bb0a401d10004c0a801ec6bec7401c6120c84007808000a17821f1112149c00181fffab0d2a108211446a3239a205067e9046bc70086be874019b0a1e52f06ba07c019600e06ba81a1e7e00000189ffffffff6ba47e0000017ec0a801ff0a1782140612149c000d1fffab0d2a108206076dff6c7401656bdc68a401510006ffffffffffff6bac7401526be47401477c001386dd686bc4a401340006ffffffffffff6bbc7401350a147c012800007a0e3a6b8c0a267c012200ff6bd47401170a366b9c7c011400858218886a26a2040fff02000000000000000000000000006b9872f9aa0e82ec96aa0f8c00e5048e68a2d20f7e9046bc700828c68e23672c86dd606a12a2b91400603afffe800000000000002ac68efffe23672c6a36a2b20286006a3aa2ab0240c0123c7aa600920ab494009e091e8c00991b586a3ea2781c0000000000000000010128c68e23672c05010000000005dc030440c01a5a7a73009212b49600000067555555558e0000005effffffff1a5e9600000053555555558e0000004affffffff6a62a22d18000000002401fa000480f0000000000000000000190300001a7a7a2800920a78940020091e8c001b1b586a7ea204122401fa000480f000000000000000000107016bb872086bd8b03a01b87206b03a01b87201
diff --git a/apf2java/apf2java.out b/apf2java/apf2java.out
index ff7ba96..a79146e 100644
--- a/apf2java/apf2java.out
+++ b/apf2java/apf2java.out
@@ -1,134 +1,171 @@
@Test
public void testFullApfV4ProgramGeneration() throws IllegalInstructionException {
ApfV4Generator gen = new ApfV4Generator(APF_VERSION_4);
- gen.addLoadImmediate(R1, -4);
+ gen.addLoadImmediate(R1, -8);
gen.addLoadData(R0, 0);
gen.addAdd(1);
gen.addStoreData(R0, 0);
gen.addLoad16(R0, 12);
- gen.addLoadImmediate(R1, -108);
- gen.addJumpIfR0LessThan(0x600, "LABEL_345");
- gen.addLoadImmediate(R1, -112);
- gen.addJumpIfR0Equals(0x88a2, "LABEL_345");
- gen.addJumpIfR0Equals(0x88a4, "LABEL_345");
- gen.addJumpIfR0Equals(0x88b8, "LABEL_345");
- gen.addJumpIfR0Equals(0x88cd, "LABEL_345");
- gen.addJumpIfR0Equals(0x88e1, "LABEL_345");
- gen.addJumpIfR0Equals(0x88e3, "LABEL_345");
- gen.addJumpIfR0NotEquals(0x806, "LABEL_115");
+ gen.addLoadImmediate(R1, -120);
+ gen.addJumpIfR0LessThan(0x600, "LABEL_582");
+ gen.addLoadImmediate(R1, -124);
+ gen.addJumpIfR0Equals(0x88a2, "LABEL_582");
+ gen.addJumpIfR0Equals(0x88a4, "LABEL_582");
+ gen.addJumpIfR0Equals(0x88b8, "LABEL_582");
+ gen.addJumpIfR0Equals(0x88cd, "LABEL_582");
+ gen.addJumpIfR0Equals(0x88e1, "LABEL_582");
+ gen.addJumpIfR0Equals(0x88e3, "LABEL_582");
+ gen.addJumpIfR0NotEquals(0x806, "LABEL_122");
gen.addLoadImmediate(R0, 14);
- gen.addLoadImmediate(R1, -36);
- gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("000108000604"), "LABEL_339");
+ gen.addLoadImmediate(R1, -152);
+ gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("000108000604"), "LABEL_582");
gen.addLoad16(R0, 20);
- gen.addJumpIfR0Equals(0x1, "LABEL_100");
- gen.addLoadImmediate(R1, -40);
- gen.addJumpIfR0NotEquals(0x2, "LABEL_339");
+ gen.addJumpIfR0Equals(0x1, "LABEL_104");
+ gen.addLoadImmediate(R1, -156);
+ gen.addJumpIfR0NotEquals(0x2, "LABEL_582");
gen.addLoad32(R0, 28);
- gen.addLoadImmediate(R1, -116);
- gen.addJumpIfR0Equals(0x0, "LABEL_345");
+ gen.addLoadImmediate(R1, -128);
+ gen.addJumpIfR0Equals(0x0, "LABEL_582");
gen.addLoadImmediate(R0, 0);
- gen.addLoadImmediate(R1, -44);
- gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("ffffffffffff"), "LABEL_339");
+ gen.addLoadImmediate(R1, -56);
+ gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("ffffffffffff"), "LABEL_576");
- gen.defineLabel("LABEL_100");
+ gen.defineLabel("LABEL_104");
gen.addLoadImmediate(R0, 38);
- gen.addLoadImmediate(R1, -68);
- gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("c0a801be"), "LABEL_345");
- gen.addLoadImmediate(R1, -8);
- gen.addJump("LABEL_339");
+ gen.addLoadImmediate(R1, -80);
+ gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("c0a801ec"), "LABEL_582");
+ gen.addLoadImmediate(R1, -20);
+ gen.addJump("LABEL_576");
- gen.defineLabel("LABEL_115");
+ gen.defineLabel("LABEL_122");
gen.addLoad16(R0, 12);
- gen.addJumpIfR0NotEquals(0x800, "LABEL_263");
+ gen.addJumpIfR0NotEquals(0x800, "LABEL_249");
gen.addLoad8(R0, 23);
- gen.addJumpIfR0NotEquals(0x11, "LABEL_157");
+ gen.addJumpIfR0NotEquals(0x11, "LABEL_165");
gen.addLoad16(R0, 20);
- gen.addJumpIfR0AnyBitsSet(0x1fff, "LABEL_157");
+ gen.addJumpIfR0AnyBitsSet(0x1fff, "LABEL_165");
gen.addLoadFromMemory(R1, 13);
gen.addLoad16Indexed(R0, 16);
- gen.addJumpIfR0NotEquals(0x44, "LABEL_157");
+ gen.addJumpIfR0NotEquals(0x44, "LABEL_165");
gen.addLoadImmediate(R0, 50);
gen.addAddR1();
- gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("ea42226789c0"), "LABEL_157");
- gen.addLoadImmediate(R1, -12);
- gen.addJump("LABEL_339");
+ gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("7e9046bc7008"), "LABEL_165");
+ gen.addLoadImmediate(R1, -24);
+ gen.addJump("LABEL_576");
- gen.defineLabel("LABEL_157");
+ gen.defineLabel("LABEL_165");
gen.addLoad8(R0, 30);
gen.addAnd(240);
- gen.addLoadImmediate(R1, -84);
- gen.addJumpIfR0Equals(0xe0, "LABEL_345");
- gen.addLoadImmediate(R1, -76);
+ gen.addLoadImmediate(R1, -96);
+ gen.addJumpIfR0Equals(0xe0, "LABEL_582");
+ gen.addLoadImmediate(R1, -88);
gen.addLoad32(R0, 30);
- gen.addJumpIfR0Equals(0xffffffff, "LABEL_345");
- gen.addLoadImmediate(R1, -80);
- gen.addJumpIfR0Equals(0xc0a801ff, "LABEL_345");
+ gen.addJumpIfR0Equals(0xffffffff, "LABEL_582");
+ gen.addLoadImmediate(R1, -92);
+ gen.addJumpIfR0Equals(0xc0a801ff, "LABEL_582");
gen.addLoad8(R0, 23);
- gen.addJumpIfR0NotEquals(0x11, "LABEL_243");
- gen.addLoadImmediate(R0, 26);
- gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("6b7a1f1fc0a801be"), "LABEL_243");
- gen.addLoadFromMemory(R0, 13);
- gen.addAdd(8);
- gen.addSwap();
- gen.addLoad16(R0, 16);
- gen.addNeg(R1);
- gen.addAddR1();
- gen.addJumpIfR0NotEquals(0x1, "LABEL_243");
- gen.addLoadFromMemory(R0, 13);
- gen.addAdd(14);
- gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("1194ceca"), "LABEL_243");
- gen.addAdd(8);
- gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("ff"), "LABEL_243");
- gen.addLoadImmediate(R1, -128);
- gen.addJump("LABEL_345");
+ gen.addJumpIfR0NotEquals(0x6, "LABEL_225");
+ gen.addLoad16(R0, 20);
+ gen.addJumpIfR0AnyBitsSet(0x1fff, "LABEL_225");
+ gen.addLoadFromMemory(R1, 13);
+ gen.addLoad16Indexed(R0, 16);
+ gen.addJumpIfR0NotEquals(0x7, "LABEL_225");
+ gen.addLoadImmediate(R1, -148);
+ gen.addJump("LABEL_582");
- gen.defineLabel("LABEL_243");
- gen.addLoadImmediate(R1, -24);
+ gen.defineLabel("LABEL_225");
+ gen.addLoadImmediate(R1, -36);
gen.addLoadImmediate(R0, 0);
- gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("ffffffffffff"), "LABEL_339");
- gen.addLoadImmediate(R1, -72);
- gen.addJump("LABEL_345");
- gen.addLoadImmediate(R1, -16);
- gen.addJump("LABEL_339");
+ gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("ffffffffffff"), "LABEL_576");
+ gen.addLoadImmediate(R1, -84);
+ gen.addJump("LABEL_582");
+ gen.addLoadImmediate(R1, -28);
+ gen.addJump("LABEL_576");
- gen.defineLabel("LABEL_263");
- gen.addJumpIfR0Equals(0x86dd, "LABEL_284");
+ gen.defineLabel("LABEL_249");
+ gen.addJumpIfR0Equals(0x86dd, "LABEL_273");
gen.addLoadImmediate(R0, 0);
- gen.addLoadImmediate(R1, -48);
- gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("ffffffffffff"), "LABEL_339");
- gen.addLoadImmediate(R1, -56);
- gen.addJump("LABEL_345");
+ gen.addLoadImmediate(R1, -60);
+ gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("ffffffffffff"), "LABEL_576");
+ gen.addLoadImmediate(R1, -68);
+ gen.addJump("LABEL_582");
- gen.defineLabel("LABEL_284");
+ gen.defineLabel("LABEL_273");
gen.addLoad8(R0, 20);
- gen.addJumpIfR0Equals(0x0, "LABEL_339");
- gen.addJumpIfR0Equals(0x3a, "LABEL_303");
- gen.addLoadImmediate(R1, -104);
+ gen.addJumpIfR0Equals(0x0, "LABEL_576");
+ gen.addJumpIfR0Equals(0x3a, "LABEL_297");
+ gen.addLoadImmediate(R1, -116);
gen.addLoad8(R0, 38);
- gen.addJumpIfR0Equals(0xff, "LABEL_345");
- gen.addLoadImmediate(R1, -32);
- gen.addJump("LABEL_339");
+ gen.addJumpIfR0Equals(0xff, "LABEL_582");
+ gen.addLoadImmediate(R1, -44);
+ gen.addJump("LABEL_576");
- gen.defineLabel("LABEL_303");
+ gen.defineLabel("LABEL_297");
gen.addLoad8(R0, 54);
- gen.addLoadImmediate(R1, -88);
- gen.addJumpIfR0Equals(0x85, "LABEL_345");
- gen.addJumpIfR0NotEquals(0x88, "LABEL_337");
+ gen.addLoadImmediate(R1, -100);
+ gen.addJumpIfR0Equals(0x85, "LABEL_582");
+ gen.addJumpIfR0NotEquals(0x88, "LABEL_333");
gen.addLoadImmediate(R0, 38);
- gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("ff0200000000000000000000000000"), "LABEL_337");
- gen.addLoadImmediate(R1, -92);
- gen.addJump("LABEL_345");
+ gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("ff0200000000000000000000000000"), "LABEL_333");
+ gen.addLoadImmediate(R1, -104);
+ gen.addJump("LABEL_582");
- gen.defineLabel("LABEL_337");
- gen.addLoadImmediate(R1, -28);
+ gen.defineLabel("LABEL_333");
+ gen.addLoadFromMemory(R0, 14);
+ gen.addJumpIfR0NotEquals(0x96, "LABEL_574");
+ gen.addLoadFromMemory(R0, 15);
+ gen.addJumpIfR0GreaterThan(0x48e, "LABEL_574");
+ gen.addLoadImmediate(R0, 0);
+ gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("7e9046bc700828c68e23672c86dd60"), "LABEL_574");
+ gen.addLoadImmediate(R0, 18);
+ gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("00603afffe800000000000002ac68efffe23672c"), "LABEL_574");
+ gen.addLoadImmediate(R0, 54);
+ gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("8600"), "LABEL_574");
+ gen.addLoadImmediate(R0, 58);
+ gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("40c0"), "LABEL_574");
+ gen.addLoad16(R0, 60);
+ gen.addJumpIfR0Equals(0x0, "LABEL_574");
+ gen.addJumpIfR0LessThan(0xb4, "LABEL_421");
+ gen.addJumpIfR0LessThan(0x91e, "LABEL_574");
+ gen.addJumpIfR0GreaterThan(0x1b58, "LABEL_574");
+
+ gen.defineLabel("LABEL_421");
+ gen.addLoadImmediate(R0, 62);
+ gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("0000000000000000010128c68e23672c05010000000005dc030440c0"), "LABEL_574");
+ gen.addLoad32(R0, 90);
+ gen.addJumpIfR0Equals(0x0, "LABEL_574");
+ gen.addJumpIfR0LessThan(0xb4, "LABEL_480");
+ gen.addJumpIfR0LessThan(0x55555555, "LABEL_574");
+ gen.addJumpIfR0GreaterThan(0xffffffffL, "LABEL_574");
+
+ gen.defineLabel("LABEL_480");
+ gen.addLoad32(R0, 94);
+ gen.addJumpIfR0LessThan(0x55555555, "LABEL_574");
+ gen.addJumpIfR0GreaterThan(0xffffffffL, "LABEL_574");
+ gen.addLoadImmediate(R0, 98);
+ gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("000000002401fa000480f000000000000000000019030000"), "LABEL_574");
+ gen.addLoad32(R0, 122);
+ gen.addJumpIfR0Equals(0x0, "LABEL_574");
+ gen.addJumpIfR0LessThan(0x78, "LABEL_547");
+ gen.addJumpIfR0LessThan(0x91e, "LABEL_574");
+ gen.addJumpIfR0GreaterThan(0x1b58, "LABEL_574");
+
+ gen.defineLabel("LABEL_547");
+ gen.addLoadImmediate(R0, 126);
+ gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("2401fa000480f00000000000000000010701"), "LABEL_574");
+ gen.addLoadImmediate(R1, -72);
+ gen.addJump("LABEL_582");
+
+ gen.defineLabel("LABEL_574");
+ gen.addLoadImmediate(R1, -40);
- gen.defineLabel("LABEL_339");
+ gen.defineLabel("LABEL_576");
gen.addLoadData(R0, 0);
gen.addAdd(1);
gen.addStoreData(R0, 0);
gen.addJump(PASS_LABEL);
- gen.defineLabel("LABEL_345");
+ gen.defineLabel("LABEL_582");
gen.addLoadData(R0, 0);
gen.addAdd(1);
gen.addStoreData(R0, 0);
@@ -136,6 +173,6 @@
byte[] program = gen.generate();
final String programString = toHexString(program).toLowerCase();
- final String referenceProgramHexString = "6bfcb03a01b8120c6b9494014a06006b907c014388a27c013e88a47c013988b87c013488cd7c012f88e17c012a88e384003f08066a0e6bdca40110000600010800060412147a1c016bd884010400021a1c6b8c7c01010000686bd4a2ef06ffffffffffff6a266bbca2ea04c0a801be6bf872e0120c84008d08000a17821e1112149c00171fffab0d2a108210446a3239a20406ea42226789c06bf472b60a1e52f06bac7ab3e06bb41a1e7e000000a6ffffffff6bb07e0000009bc0a801ff0a178230116a1aa223086b7a1f1fc0a801beaa0d3a08aa221210ab2139821501aa0d3a0ea20a041194ceca3a08a20401ff6b8072666be868a25406ffffffffffff6bb872566bf0724c7c001086dd686bd0a23b06ffffffffffff6bc8723d0a147a32007a0b3a6b980a267a2eff6be072240a366ba87a23858218886a26a2040fff02000000000000000000000000006ba472086be4b03a01b87206b03a01b87201";
+ final String referenceProgramHexString = "6bf8b03a01b8120c6b8894023706006b847c023088a27c022b88a47c022688b87c022188cd7c021c88e17c021788e384004608066a0e6dff68a40202000600010800060412147a1f016dff648401f500021a1c6b807c01ec0000686bc8a401d80006ffffffffffff6a266bb0a401d10004c0a801ec6bec7401c6120c84007808000a17821f1112149c00181fffab0d2a108211446a3239a205067e9046bc70086be874019b0a1e52f06ba07c019600e06ba81a1e7e00000189ffffffff6ba47e0000017ec0a801ff0a1782140612149c000d1fffab0d2a108206076dff6c7401656bdc68a401510006ffffffffffff6bac7401526be47401477c001386dd686bc4a401340006ffffffffffff6bbc7401350a147c012800007a0e3a6b8c0a267c012200ff6bd47401170a366b9c7c011400858218886a26a2040fff02000000000000000000000000006b9872f9aa0e82ec96aa0f8c00e5048e68a2d20f7e9046bc700828c68e23672c86dd606a12a2b91400603afffe800000000000002ac68efffe23672c6a36a2b20286006a3aa2ab0240c0123c7aa600920ab494009e091e8c00991b586a3ea2781c0000000000000000010128c68e23672c05010000000005dc030440c01a5a7a73009212b49600000067555555558e0000005effffffff1a5e9600000053555555558e0000004affffffff6a62a22d18000000002401fa000480f0000000000000000000190300001a7a7a2800920a78940020091e8c001b1b586a7ea204122401fa000480f000000000000000000107016bb872086bd8b03a01b87206b03a01b87201";
assertEquals(referenceProgramHexString, programString);
}
diff --git a/apf2java/apf2java.sh b/apf2java/apf2java.sh
index 14e0c33..e5e716c 100755
--- a/apf2java/apf2java.sh
+++ b/apf2java/apf2java.sh
@@ -29,6 +29,7 @@ sed -r \
's@: ldhx +r([01]), \[r1\+([0-9]+)\]@: gen.addLoad16Indexed(R\1, \2);@;'\
's@: ldwx +r([01]), \[r1\+([0-9]+)\]@: gen.addLoad32Indexed(R\1, \2);@;'\
's@: ldm +r([01]), m\[([0-9]+)\]@: gen.addLoadFromMemory(R\1, \2);@;'\
+'/addJumpIfR0(Greater|Less)Than/s@(0x[8-f][0-9a-f]{7})@\1L@;'\
< apf2java.txt > tmp
declare -ar LABELS=($(sed -rn 's@.*LABEL_([0-9]+).*@\1@p' < tmp | sort -u))
for L in "${LABELS[@]}"; do
diff --git a/apf2java/apf2java.txt b/apf2java/apf2java.txt
index 8800e9e..9de4bd5 100644
--- a/apf2java/apf2java.txt
+++ b/apf2java/apf2java.txt
@@ -1,112 +1,141 @@
- 0: li r1, -4
+ 0: li r1, -8
2: lddw r0, [r1]
3: add r0, 1
5: stdw r0, [r1]
6: ldh r0, [12]
- 8: li r1, -108
- 10: jlt r0, 0x600, 345
- 15: li r1, -112
- 17: jeq r0, 0x88a2, 345
- 22: jeq r0, 0x88a4, 345
- 27: jeq r0, 0x88b8, 345
- 32: jeq r0, 0x88cd, 345
- 37: jeq r0, 0x88e1, 345
- 42: jeq r0, 0x88e3, 345
- 47: jne r0, 0x806, 115
+ 8: li r1, -120
+ 10: jlt r0, 0x600, 582
+ 15: li r1, -124
+ 17: jeq r0, 0x88a2, 582
+ 22: jeq r0, 0x88a4, 582
+ 27: jeq r0, 0x88b8, 582
+ 32: jeq r0, 0x88cd, 582
+ 37: jeq r0, 0x88e1, 582
+ 42: jeq r0, 0x88e3, 582
+ 47: jne r0, 0x806, 122
52: li r0, 14
- 54: li r1, -36
- 56: jnebs r0, 0x6, 339, 000108000604
- 67: ldh r0, [20]
- 69: jeq r0, 0x1, 100
- 72: li r1, -40
- 74: jne r0, 0x2, 339
- 79: ldw r0, [28]
- 81: li r1, -116
- 83: jeq r0, 0x0, 345
- 88: li r0, 0
- 89: li r1, -44
- 91: jnebs r0, 0x6, 339, ffffffffffff
- 100: li r0, 38
- 102: li r1, -68
- 104: jnebs r0, 0x4, 345, c0a801be
- 111: li r1, -8
- 113: jmp 339
- 115: ldh r0, [12]
- 117: jne r0, 0x800, 263
- 122: ldb r0, [23]
- 124: jne r0, 0x11, 157
- 127: ldh r0, [20]
- 129: jset r0, 0x1fff, 157
- 134: ldm r1, m[13]
- 136: ldhx r0, [r1+16]
- 138: jne r0, 0x44, 157
- 141: li r0, 50
- 143: add r0, r1
- 144: jnebs r0, 0x6, 157, ea42226789c0
- 153: li r1, -12
- 155: jmp 339
- 157: ldb r0, [30]
- 159: and r0, 240
- 161: li r1, -84
- 163: jeq r0, 0xe0, 345
- 166: li r1, -76
- 168: ldw r0, [30]
- 170: jeq r0, 0xffffffff, 345
- 179: li r1, -80
- 181: jeq r0, 0xc0a801ff, 345
- 190: ldb r0, [23]
- 192: jne r0, 0x11, 243
- 195: li r0, 26
- 197: jnebs r0, 0x8, 243, 6b7a1f1fc0a801be
- 208: ldm r0, m[13]
- 210: add r0, 8
- 212: swap
- 214: ldh r0, [16]
- 216: neg r1
- 218: add r0, r1
- 219: jne r0, 0x1, 243
- 222: ldm r0, m[13]
- 224: add r0, 14
- 226: jnebs r0, 0x4, 243, 1194ceca
- 233: add r0, 8
- 235: jnebs r0, 0x1, 243, ff
- 239: li r1, -128
- 241: jmp 345
- 243: li r1, -24
- 245: li r0, 0
- 246: jnebs r0, 0x6, 339, ffffffffffff
- 255: li r1, -72
- 257: jmp 345
- 259: li r1, -16
- 261: jmp 339
- 263: jeq r0, 0x86dd, 284
- 268: li r0, 0
- 269: li r1, -48
- 271: jnebs r0, 0x6, 339, ffffffffffff
- 280: li r1, -56
- 282: jmp 345
- 284: ldb r0, [20]
- 286: jeq r0, 0x0, 339
- 289: jeq r0, 0x3a, 303
- 292: li r1, -104
- 294: ldb r0, [38]
- 296: jeq r0, 0xff, 345
- 299: li r1, -32
- 301: jmp 339
- 303: ldb r0, [54]
- 305: li r1, -88
- 307: jeq r0, 0x85, 345
- 310: jne r0, 0x88, 337
- 313: li r0, 38
- 315: jnebs r0, 0xf, 337, ff0200000000000000000000000000
- 333: li r1, -92
- 335: jmp 345
- 337: li r1, -28
- 339: lddw r0, [r1]
- 340: add r0, 1
- 342: stdw r0, [r1]
- 343: jmp PASS
- 345: lddw r0, [r1]
- 346: add r0, 1
- 348: stdw r0, [r1]
- 349: jmp DROP
+ 54: li r1, -152
+ 57: jnebs r0, 0x6, 582, 000108000604
+ 68: ldh r0, [20]
+ 70: jeq r0, 0x1, 104
+ 73: li r1, -156
+ 76: jne r0, 0x2, 582
+ 81: ldw r0, [28]
+ 83: li r1, -128
+ 85: jeq r0, 0x0, 582
+ 90: li r0, 0
+ 91: li r1, -56
+ 93: jnebs r0, 0x6, 576, ffffffffffff
+ 104: li r0, 38
+ 106: li r1, -80
+ 108: jnebs r0, 0x4, 582, c0a801ec
+ 117: li r1, -20
+ 119: jmp 576
+ 122: ldh r0, [12]
+ 124: jne r0, 0x800, 249
+ 129: ldb r0, [23]
+ 131: jne r0, 0x11, 165
+ 134: ldh r0, [20]
+ 136: jset r0, 0x1fff, 165
+ 141: ldm r1, m[13]
+ 143: ldhx r0, [r1+16]
+ 145: jne r0, 0x44, 165
+ 148: li r0, 50
+ 150: add r0, r1
+ 151: jnebs r0, 0x6, 165, 7e9046bc7008
+ 160: li r1, -24
+ 162: jmp 576
+ 165: ldb r0, [30]
+ 167: and r0, 240
+ 169: li r1, -96
+ 171: jeq r0, 0xe0, 582
+ 176: li r1, -88
+ 178: ldw r0, [30]
+ 180: jeq r0, 0xffffffff, 582
+ 189: li r1, -92
+ 191: jeq r0, 0xc0a801ff, 582
+ 200: ldb r0, [23]
+ 202: jne r0, 0x6, 225
+ 205: ldh r0, [20]
+ 207: jset r0, 0x1fff, 225
+ 212: ldm r1, m[13]
+ 214: ldhx r0, [r1+16]
+ 216: jne r0, 0x7, 225
+ 219: li r1, -148
+ 222: jmp 582
+ 225: li r1, -36
+ 227: li r0, 0
+ 228: jnebs r0, 0x6, 576, ffffffffffff
+ 239: li r1, -84
+ 241: jmp 582
+ 244: li r1, -28
+ 246: jmp 576
+ 249: jeq r0, 0x86dd, 273
+ 254: li r0, 0
+ 255: li r1, -60
+ 257: jnebs r0, 0x6, 576, ffffffffffff
+ 268: li r1, -68
+ 270: jmp 582
+ 273: ldb r0, [20]
+ 275: jeq r0, 0x0, 576
+ 280: jeq r0, 0x3a, 297
+ 283: li r1, -116
+ 285: ldb r0, [38]
+ 287: jeq r0, 0xff, 582
+ 292: li r1, -44
+ 294: jmp 576
+ 297: ldb r0, [54]
+ 299: li r1, -100
+ 301: jeq r0, 0x85, 582
+ 306: jne r0, 0x88, 333
+ 309: li r0, 38
+ 311: jnebs r0, 0xf, 333, ff0200000000000000000000000000
+ 329: li r1, -104
+ 331: jmp 582
+ 333: ldm r0, m[14]
+ 335: jne r0, 0x96, 574
+ 338: ldm r0, m[15]
+ 340: jgt r0, 0x48e, 574
+ 345: li r0, 0
+ 346: jnebs r0, 0xf, 574, 7e9046bc700828c68e23672c86dd60
+ 364: li r0, 18
+ 366: jnebs r0, 0x14, 574, 00603afffe800000000000002ac68efffe23672c
+ 389: li r0, 54
+ 391: jnebs r0, 0x2, 574, 8600
+ 396: li r0, 58
+ 398: jnebs r0, 0x2, 574, 40c0
+ 403: ldh r0, [60]
+ 405: jeq r0, 0x0, 574
+ 408: jlt r0, 0xb4, 421
+ 411: jlt r0, 0x91e, 574
+ 416: jgt r0, 0x1b58, 574
+ 421: li r0, 62
+ 423: jnebs r0, 0x1c, 574, 0000000000000000010128c68e23672c05010000000005dc030440c0
+ 454: ldw r0, [90]
+ 456: jeq r0, 0x0, 574
+ 459: jlt r0, 0xb4, 480
+ 462: jlt r0, 0x55555555, 574
+ 471: jgt r0, 0xffffffff, 574
+ 480: ldw r0, [94]
+ 482: jlt r0, 0x55555555, 574
+ 491: jgt r0, 0xffffffff, 574
+ 500: li r0, 98
+ 502: jnebs r0, 0x18, 574, 000000002401fa000480f000000000000000000019030000
+ 529: ldw r0, [122]
+ 531: jeq r0, 0x0, 574
+ 534: jlt r0, 0x78, 547
+ 537: jlt r0, 0x91e, 574
+ 542: jgt r0, 0x1b58, 574
+ 547: li r0, 126
+ 549: jnebs r0, 0x12, 574, 2401fa000480f00000000000000000010701
+ 570: li r1, -72
+ 572: jmp 582
+ 574: li r1, -40
+ 576: lddw r0, [r1]
+ 577: add r0, 1
+ 579: stdw r0, [r1]
+ 580: jmp PASS
+ 582: lddw r0, [r1]
+ 583: add r0, 1
+ 585: stdw r0, [r1]
+ 586: jmp DROP
diff --git a/disassembler.c b/disassembler.c
index 5d3799e..a89f213 100644
--- a/disassembler.c
+++ b/disassembler.c
@@ -296,25 +296,37 @@ const char* apf_disassemble(const uint8_t* program, uint32_t program_len, uint32
break;
}
- case JDNSQMATCH_EXT_OPCODE: {
- if (reg_num == 0) {
- print_opcode("jdnsqne");
+ case JDNSQMATCH_EXT_OPCODE:
+ case JDNSAMATCH_EXT_OPCODE: {
+ uint32_t offs = DECODE_IMM(1 << (len_field - 1));
+ uint16_t qtype;
+ if (imm == JDNSQMATCH_EXT_OPCODE) {
+ print_opcode(reg_num ? "jdnsqeq" : "jdnsqne");
+ qtype = DECODE_IMM(1);
} else {
- print_opcode("jdnsqeq");
+ print_opcode(reg_num ? "jdnsaeq" : "jdnsane");
}
bprintf("r0, ");
- uint32_t offs = DECODE_IMM(1 << (len_field - 1));
- uint16_t qtype = DECODE_IMM(1);
uint32_t end = *ptr2pc;
while (end + 1 < program_len && !(program[end] == 0 && program[end + 1] == 0)) {
end++;
}
end += 2;
print_jump_target(end + offs, program_len);
- bprintf(", %d, ", qtype);
+ bprintf(", ");
+ if (imm == JDNSQMATCH_EXT_OPCODE) {
+ bprintf("%d, ", qtype);
+ }
while (*ptr2pc < end) {
uint8_t byte = program[(*ptr2pc)++];
- bprintf("%02x", byte);
+ // values < 0x40 could be lengths, but - and 0..9 are in practice usually
+ // too long to be lengths so print them as characters. All other chars < 0x40
+ // are not valid in dns character.
+ if (byte == '-' || (byte >= '0' && byte <= '9') || byte >= 0x40) {
+ bprintf("%c", byte);
+ } else {
+ bprintf("(%d)", byte);
+ }
}
break;
}
@@ -350,9 +362,9 @@ const char* apf_disassemble(const uint8_t* program, uint32_t program_len, uint32
}
case PKTDATACOPY_OPCODE: {
if (reg_num == 0) {
- print_opcode("pcopy");
+ print_opcode("pktcopy");
} else {
- print_opcode("dcopy");
+ print_opcode("datacopy");
}
uint32_t src_offs = imm;
uint32_t copy_len = DECODE_IMM(1);
diff --git a/v5/apf_interpreter_assemble.sh b/v5/apf_interpreter_assemble.sh
index 5e93456..7c4e8f0 100755
--- a/v5/apf_interpreter_assemble.sh
+++ b/v5/apf_interpreter_assemble.sh
@@ -32,6 +32,8 @@ do_test() {
}
main() {
+ cd "${0%/*}"
+
local -r me="${0##*/}"
case "${me}" in
apf_interpreter_assemble.sh)