Fixed in mob, plus some more asm bugs (32 and 64 bit).
ALT(DEF_ASM_OP1(lcall, 0xff, 3, OPC_MODRM, OPT_EA)) 1) or
ALT(DEF_ASM_OP1(lcall, 0xff, 3, OPC_MODRM, OPT_INDIR)) 2) ?
A test code:
static unsigned long bios32_service(unsigned long service)
{
int return_code;
__asm__("lcall *(%%edi); cld"
: "=a" (return_code)
: "0" (service),
"D" (&bios32_indirect));
__asm__("lcall (%%edi); cld"
: "=a" (return_code)
: "0" (service),
"D" (&bios32_indirect));
}
gcc/as prints warning for second case (indirect call w/o *). tcc with
1) accept all cases 2) don't accept second case (error:).
I looked at the "call" opcode 0xff modifiers
ALT(DEF_ASM_OP1(call, 0xff, 2, OPC_MODRM, OPT_INDIR))