]> git.ipfire.org Git - thirdparty/xz.git/commitdiff
debug: Add generator for the ARM64 test file data.
authorLasse Collin <lasse.collin@tukaani.org>
Mon, 8 Apr 2024 18:51:55 +0000 (21:51 +0300)
committerLasse Collin <lasse.collin@tukaani.org>
Tue, 9 Apr 2024 15:22:27 +0000 (18:22 +0300)
debug/Makefile.am
debug/testfilegen-arm64.c [new file with mode: 0644]

index 7295ee61876553ee4fa5abea4d32b6366290d530..db6f47f71b802cc01653ec839f9c41a9ff5fe6a6 100644 (file)
@@ -11,7 +11,8 @@ noinst_PROGRAMS = \
        memusage \
        crc32 \
        known_sizes \
-       hex2bin
+       hex2bin \
+       testfilegen-arm64
 
 AM_CPPFLAGS = \
        -I$(top_srcdir)/src/common \
diff --git a/debug/testfilegen-arm64.c b/debug/testfilegen-arm64.c
new file mode 100644 (file)
index 0000000..88cadca
--- /dev/null
@@ -0,0 +1,116 @@
+// SPDX-License-Identifier: 0BSD
+
+///////////////////////////////////////////////////////////////////////////////
+//
+/// \file       testfilegen-arm64.c
+/// \brief      Generates uncompressed test file for the ARM64 filter
+//
+//  Author:     Lasse Collin
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+
+
+static uint32_t pc4 = 0;
+
+
+static void
+put32le(uint32_t v)
+{
+       putchar((v >> 0) & 0xFF);
+       putchar((v >> 8) & 0xFF);
+       putchar((v >> 16) & 0xFF);
+       putchar((v >> 24) & 0xFF);
+       ++pc4;
+}
+
+
+static void
+putbl(uint32_t imm)
+{
+       imm &= (1U << 26) - 1;
+       imm |= 0x25U << 26;
+       put32le(imm);
+}
+
+
+static void
+putadrp32(uint32_t imm)
+{
+       imm &= 0x1FFFFFU;
+
+       // fprintf(stderr, "ADRP 0x%08X\n", imm);
+
+       uint32_t instr = 0x90000000;
+       instr |= (pc4 * 5 + 11) & 0x1F;
+       instr |= (imm & 3) << 29;
+       instr |= (imm >> 2) << 5;
+
+       put32le(instr);
+}
+
+
+extern int
+main(void)
+{
+       putbl(0);
+       putbl(0x03FFFFFF);
+       putbl(0x03FFFFFE);
+       putbl(0x03FFFFFD);
+
+       putbl(3);
+       putbl(2);
+       putbl(1);
+       putbl(0);
+
+
+       putbl(0x02000001);
+       putbl(0x02000000);
+       putbl(0x01FFFFFF);
+       putbl(0x01FFFFFE);
+
+       putbl(0x01111117);
+       putbl(0x01111116);
+       putbl(0x01111115);
+       putbl(0x01111114);
+
+
+       putbl(0x02222227);
+       putbl(0x02222226);
+       putbl(0x02222225);
+       putbl(0x02222224);
+
+       putbl(0U - pc4);
+       putbl(0U - pc4);
+       putbl(0U - pc4);
+       putbl(0U - pc4);
+
+       putadrp32(0x00);
+       putadrp32(0x05);
+       putadrp32(0x15);
+       putadrp32(0x25);
+
+       for (unsigned rep = 0; rep < 2; ++rep) {
+               while ((pc4 << 2) & 4095)
+                       put32le(0x55555555U);
+
+               for (unsigned i = 10; i <= 21; ++i) {
+                       const uint32_t neg = (0x1FFF00 >> (21 - i)) & ~255U;
+                       const uint32_t plus = 1U << (i - 1);
+                       putadrp32(0x000000 | plus);
+                       putadrp32(0x000005 | plus);
+                       putadrp32(0x0000FE | plus);
+                       putadrp32(0x0000FF | plus);
+
+                       putadrp32(0x000000 | neg);
+                       putadrp32(0x000005 | neg);
+                       putadrp32(0x0000FE | neg);
+                       putadrp32(0x0000FF | neg);
+               }
+       }
+
+       return 0;
+}