X-Git-Url: https://jxself.org/git/?p=b43-tools.git;a=blobdiff_plain;f=assembler%2Fmain.c;h=309d7c5fed1f95536345efe4f26354d70b97eeb0;hp=0d995a4d6ffe0619ecf57e4cc092364d5b11d5ed;hb=7ff7a760aa92b63ed4af8aabddb621cc9483e67f;hpb=1c80842adfb1a722e33f3b8b9e0e13c65782d084 diff --git a/assembler/main.c b/assembler/main.c index 0d995a4..309d7c5 100644 --- a/assembler/main.c +++ b/assembler/main.c @@ -325,9 +325,21 @@ static unsigned int generate_mem_operand(struct assembler_context *ctx, case MEM_DIRECT: /* format: 0b0mmm mmmm mmmm */ off = mem->offset; - if (off & ~0x7FF) { //FIXME 4096 words for v15 arch possible? - asm_warn(ctx, "DIRECT memoffset 0x%X too long (> 11 bits)", off); - off &= 0x7FF; + switch (ctx->arch) { + case 5: + if (off & ~0x7FF) { + asm_warn(ctx, "DIRECT memoffset 0x%X too long (> 11 bits)", off); + off &= 0x7FF; + } + break; + case 15: + if (off & ~0xFFF) { + asm_warn(ctx, "DIRECT memoffset 0x%X too long (> 12 bits)", off); + off &= 0xFFF; + } + break; + default: + asm_error(ctx, "Internal error: generate_mem_operand invalid arch"); } val |= off; break; @@ -345,9 +357,9 @@ static unsigned int generate_mem_operand(struct assembler_context *ctx, /* Assembler bug. The parser shouldn't pass this value. */ asm_error(ctx, "OFFR-nr too big"); } - if (reg == 6) { + if (reg == 6 && ctx->arch == 5) { asm_warn(ctx, "Using offset register 6. This register is broken " - "on certain devices. Use off0 to off5 only."); + "on architecture 5 devices. Use off0 to off5 only."); } val |= off; val |= (reg << 6);