test(asm): reject symbol "s" operands cleanly + lock (symbol-op prep)

A symbol operand (constraint "s") feeds a function/global symbol whose
mangled name the template emits — enabling a DIRECT `bl %[fn]` (one
fewer indirection than register-indirect `blr`). Until now `"s" = fn`
fell through to emit and produced an LLVM-verifier crash (param type
mismatch). Reject it at lowering with a clear diagnostic instead, and
lock that with examples/1656-platform-asm-symbol-operand.sx. The next
commit implements it and flips the example to run (→ 42).
This commit is contained in:
agra
2026-06-16 08:19:18 +03:00
parent 1346a2d020
commit c187122531
5 changed files with 66 additions and 1 deletions

View File

@@ -0,0 +1 @@
1

View File

@@ -0,0 +1,29 @@
error: symbol asm operands (`"s"`) are not yet implemented
--> examples/1656-platform-asm-symbol-operand.sx:10:12
|
10 | return asm volatile {
| ^^^^^^^^^^^^^^
11 | #string ASM
| ^^^^^^^^^^^^^^^^^^^
12 | stp x29, x30, [sp, #-16]!
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13 | mov x0, %[arg]
| ^^^^^^^^^^^^^^^^^^^^^^
14 | bl %[fn]
| ^^^^^^^^^^^^^^^^
15 | mov %[res], x0
| ^^^^^^^^^^^^^^^^^^^^^^
16 | ldp x29, x30, [sp], #16
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17 | ASM,
| ^^^^
18 | [res] "=r" -> i64,
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
19 | [arg] "r" = n,
| ^^^^^^^^^^^^^^^^^^^^^^
20 | [fn] "s" = cb, // symbol operand → direct `bl _cb`
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
21 | clobbers(.x0, .x30, .memory),
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
22 | };
| ^^^^^

View File

@@ -0,0 +1 @@