Let us return a larger constant:
int foo() { return 0xFF; }
For numbers up to 12 bits we can use the LDI S&X
instruction. Some code snippets:
def immSExt12 : PatLeaf<(imm), [{ return isInt<12>(N->getSExtValue()); }]>; def : Pat<(i32 immSExt12:$in), (LDI imm:$in)>; def LDI : HP41MCODEInst<0x130, (outs RC:$r), (ins i32imm:$sx), "LDI S&X HEX: $sx", [(set RC:$r, (i32 immSExt12:$sx))]>;
This produces:
.file "hello.c" .text .globl foo ! -- Begin function foo .type foo,@function foo: ! @foo ! %bb.0: ! %entry LDI S&X HEX: 0FF RTN .Lfunc_end0: .size foo, .Lfunc_end0-foo ! -- End function .ident "clang version 20.0.0git (https://github.com/llvm/llvm-project.git ea1dfd50bfdfbd75969fd7653bc71c81f2a2350f)" .section ".note.GNU-stack" .addrsig