mirror of https://git.tukaani.org/xz.git
Lasse Collin
3 weeks ago
2 changed files with 118 additions and 1 deletions
@ -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; |
|||
} |
Loading…
Reference in new issue