(Please move me if there is a better place?)
So we are trying to include some assembly between Linux, macOS and Windows (under clang),
and things work on the first two, but for Windows I get:
`
Windows compile (clang version 12.0.0 Target: i686-pc-windows-msvc)
clang -cc1as : fatal error : error in backend: unable to evaluate offset for variable ‘breg’`
When using code like:
bytereg \TMP1 movb (\END_READ_LOCATION), breg
.macro bytereg reg
.if \reg == %r8 || \reg == %r9 || \reg == %r10 || \reg == %r11 || \reg
== %r12 || \reg == %r13 || \reg == %r14 || \reg == %r15
.set breg, \reg()b
.elseif \reg == %rax
.set breg, %al
.elseif \reg == %rcx
.set breg, %cl
.elseif \reg == %rdx
.set breg, %dl
.elseif \reg == %rbx
.set breg, %bl
.elseif \reg == rsp
.set breg, %spl
.elseif \reg == %rbp
.set breg, %bpl
.elseif \reg == rsi
.set breg, %sil
.elseif \reg == rdi
.set breg, %dil
.else
.error “Invalid register ‘\reg()’ while expanding macro ‘byter
eg()’”
.endif
.endm
I assume then it’s related to some Window-compat code? or I’m holding it on the wrong end? Is there a flag to make clang behave like expected?
Please advice,
Unrelated, but macOS had an amusing thing where .rept ; add $16, %r12 would become “6”, $1 parsed out as something else. “add $(16), %r12” works. I assume some Darwin history there.