This time a question about the integrated assembler ------- code .code32 .data L1: .quad 88 .equ L2, . - L1 .byte 29
.text mov 55(%ebx), %eax mov L2(%ebx), %eax -------- end code clang -c -o file.o file.s gives this --------- 0000000000000000 8b4337 movl 0x37(%rbx), %eax 0000000000000003 8b8308000000 movl 0x8(%rbx), %eax --------- Both displacements fit in a signed 8-bit displacement. When a constant is given, cc1as know how to squeeze the opcode. The label L2 is local, and known even for a 1-pass assembler. Yet it doesn't know to squeeze the opcode, and uses a 32-bit signed displacement. Same result if the symbols L1, L2 are in the .text section instead of .data. Any way to tell cc1as to use the 8-bit displacement for an absolute symbol? gnu assembler has a form "mov.d8", and I believe it also knows to choose the 8-bit displacement automatically in this situation. clang doesn't seem to support .d8. PS: Where in the clang sources is cc1as found? I couldn't make it out. _______________________________________________ cfe-users mailing list cfe-users@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users