<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/57461>57461</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[riscv64 asm] Instruction LI with symbolic constant rejected by ASM parser
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
jmillikin
</td>
</tr>
</table>
<pre>
Given the following riscv64 program in assembly:
```asm
.data
.set .L_STDOUT, 1
.set .L_SYSCALL_EXIT, 93
.set .L_SYSCALL_WRITE, 64
.L_message:
.ascii "Hello, world!\n"
.set .L_message_len, . - .L_message
.text
.global _start
_start:
li a7, .L_SYSCALL_WRITE
li a0, .L_STDOUT
la a1, .L_message
li a2, .L_message_len
ecall
li a7, .L_SYSCALL_EXIT
li a0, 0
ecall
```
The GNU assembler accepts `li a2, .L_message_len` as equivalent to `li a2, 14`, with the constant symbol substituted by an integer literal.
LLVM's assembler rejects this same construction with an error:
```
$ clang --version
clang version 16.0.0 (https://github.com/llvm/llvm-project b65d3eea662d364da9be3cb7c2b36dc3a853c108)
[...]
$ clang -cc1as -triple riscv64 -filetype obj -o hello.o hello.s
hello.s:15:10: error: operand must be a constant 64-bit integer
li a2, .L_message_len
^
```
Output of GNU assembler:
```
$ riscv64-linux-gnu-as --version
GNU assembler (GNU Binutils for Ubuntu) 2.34
[...]
$ riscv64-linux-gnu-as -o hello.o hello.s
$ riscv64-linux-gnu-objdump -d hello.o
hello.o: file format elf64-littleriscv
Disassembly of section .text:
0000000000000000 <_start>:
0: 04000893 li a7,64
4: 00100513 li a0,1
8: 00000597 auipc a1,0x0
c: 00058593 mv a1,a1
10: 00e00613 li a2,14
14: 00000073 ecall
18: 05d00893 li a7,93
1c: 00000513 li a0,0
20: 00000073 ecall
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVVk1z4ygQ_TXyhZIKhJCtgw-ZODubKs9O1U6yH6cUQtgmiyQvICf599NIxpacOLVLuZCB182ju3lS2VZvy6_qIBvkdhJtWq3bF9VskVFWHPIM7U27NbxGqkHcWlmX-i2iNxFeRTj0OR5-3NbDTFJxxwOkSKx0KFk__XhYfX98iNJbdGzkPeTvH7c36_XT3V_3A7CgVzF__n7_cOdBeXbGrJ9qaS3fyhHHwi9wK5RCUZr-KuGE3uylNbqKUhKx2wbm3-1zdPSkZePhCYpHs-PzJ06-urP5Vrcl1-jJOm7O08fhlJVWiM9755fHugDhABpCOF7liJPj6gW3YJxOl_sDjSBScK0n-bzKrU_LR9TwNYehNMb-H6DOvv72GMpJGsSFkHtnEQCvEc4x4JH8t1MHDmOHXDuBk8zv4tOq3K4vZdE2EHNA2re6bDWyXWmdcp2TFSrfEG-gpJ3cwvZaOWm4TsYk1-s_vkXp3I5YGvksBbB0O2WR5fVxC9MJp9pm2Bi8SmNac070RQTSDAnN4X7F8UEaC4bDwjB5nEIkT3CCoVwXO-f21ntLf4HfFvboykS0NQy0PoRHDLfUk0NlzioqJc_ztKJ5VvGilFSUc5GWNK8E5QtGBcGLKC2OhNiXJEkitnrHTwgCEY-dUXstT3IQb5SW7m0vUVs-o7hFO3-fkvC0g5swoDeE-Q5DdwoMavcQ7qZCdWeBsUT8nKs8i0vlQmYGZ-iifVrTl-Bji9jdJxX5vXP7zqF2M63Lz5J4jEesVdO9xtumi32wpjmdFjkk0098AQOntAWpNeix7BrXQTJQmtDsakY-3uxK7D82gGxVXb1HcRWsxgEIU3SIn8-x51dzh6Te9I6cg0N4t1Op8P1K2fBq8DG0crgQgy5O3xX4oqGI3gZpvDthgQLuBwXOALQo6CiTXnag68UpSD_MZ0cDTDBm5CMDLw_khF8EPDRWzCd43qm98E-vrPgVn4zEyYgt2AWr-hAs-GkXEo6BJcb5h6x8JZPTMUg2ooXnU4ORsAIyHIBVn0UovEDBQIxPfDVCp8Om-L9RubgcM7kkeU6KNCMZnVVLWhW04DNQXi2XUNtBSPzHAluh-5GCru8HER0EW4mzLAzSOwj3zY9vaM-NlWbWGb38fwIJQ2VtJy38YfMsJ7Pdcl4JXuANrUqBs7QqiNhgxvJSzAteLOZkpnkptfXk4TuhkS-od-G_GdhqppYpTlO8oAQzyjKalHy-qTbphpGM4ZSyKMOy5konnkfSmu3MLHtKZbe1sKiVdfa8CDdJbRvZx8r7553btWb5XCut1T-qmfWbL3vyPwEkq7Wm">