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