summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaciej Żenczykowski <maze@google.com>2024-03-18 23:55:05 -0700
committerMaciej Żenczykowski <maze@google.com>2024-03-19 07:01:06 +0000
commit9026ee0f35310db82d1478a10af2e811525e317d (patch)
treefa9a4c2af1653608863a128493a649153be63a9b
parente8d35313ddc917cef506fc066b09fab975a7cc2f (diff)
downloadapf-9026ee0f35310db82d1478a10af2e811525e317d.tar.gz
v5: save an instruction
With this: text data bss dec hex filename 3888 0 0 3888 f30 apf_interpreter.arm.o text data bss dec hex filename 4883 0 0 4883 1313 apf_interpreter.x86.o Test: TreeHugger Signed-off-by: Maciej Żenczykowski <maze@google.com> Change-Id: Ic4e26f65b586dff68e27485a394b239b78268929
-rw-r--r--v5/apf_interpreter.c4
-rw-r--r--v5/apf_interpreter_source.c4
2 files changed, 6 insertions, 2 deletions
diff --git a/v5/apf_interpreter.c b/v5/apf_interpreter.c
index 7e31b4d..00576f8 100644
--- a/v5/apf_interpreter.c
+++ b/v5/apf_interpreter.c
@@ -770,11 +770,13 @@ static int do_apf_run(apf_context* ctx) {
case JGT_OPCODE:
case JLT_OPCODE:
case JSET_OPCODE: {
+ /* with len_field == 0, we have imm == 0 and thus a jmp +0, ie. a no-op */
+ if (len_field == 0) break;
/* Load second immediate field. */
u32 cmp_imm = 0;
if (reg_num == 1) {
cmp_imm = ctx->R[1];
- } else if (len_field != 0) {
+ } else {
u32 cmp_imm_len = 1 << (len_field - 1);
cmp_imm = decode_imm(ctx, cmp_imm_len); /* 2nd imm, at worst 8 bytes past prog_len */
}
diff --git a/v5/apf_interpreter_source.c b/v5/apf_interpreter_source.c
index 67d11ec..5246451 100644
--- a/v5/apf_interpreter_source.c
+++ b/v5/apf_interpreter_source.c
@@ -237,11 +237,13 @@ static int do_apf_run(apf_context* ctx) {
case JGT_OPCODE:
case JLT_OPCODE:
case JSET_OPCODE: {
+ // with len_field == 0, we have imm == 0 and thus a jmp +0, ie. a no-op
+ if (len_field == 0) break;
// Load second immediate field.
u32 cmp_imm = 0;
if (reg_num == 1) {
cmp_imm = ctx->R[1];
- } else if (len_field != 0) {
+ } else {
u32 cmp_imm_len = 1 << (len_field - 1);
cmp_imm = decode_imm(ctx, cmp_imm_len); // 2nd imm, at worst 8 bytes past prog_len
}