From e4e0f76d5c545faff67f2c51aa899989133f3512 Mon Sep 17 00:00:00 2001 From: SarahW Date: Sun, 8 Jul 2018 16:36:26 +0100 Subject: [PATCH] De-duplicate ARM literal pools. --- src/codegen_backend_arm_uops.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/codegen_backend_arm_uops.c b/src/codegen_backend_arm_uops.c index 8215caa..372044b 100644 --- a/src/codegen_backend_arm_uops.c +++ b/src/codegen_backend_arm_uops.c @@ -75,9 +75,18 @@ void codegen_reset_literal_pool(codeblock_t *block) int add_literal(codeblock_t *block, uint32_t data) { + int c; + if (literal_offset >= 4096) fatal("add_literal - literal pool full\n"); + /*Search for pre-existing value*/ + for (c = 0; c < literal_offset; c += 4) + { + if (*(uint32_t *)&block->data[ARM_LITERAL_POOL_OFFSET + c] == data) + return c; + } + *(uint32_t *)&block->data[ARM_LITERAL_POOL_OFFSET + literal_offset] = data; literal_offset += 4;