From cbe70fa62946ee831403f67461859dc8a531e0f8 Mon Sep 17 00:00:00 2001 From: Ekaitz Zarraga Date: Wed, 20 Mar 2024 17:53:41 +0100 Subject: [PATCH] riscv: Add .option assembly directive (unimp) --- riscv64-tok.h | 11 +++++++++++ tccasm.c | 23 +++++++++++++++++++++++ tcctok.h | 5 ++++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/riscv64-tok.h b/riscv64-tok.h index 5c380c6b..25c95cee 100644 --- a/riscv64-tok.h +++ b/riscv64-tok.h @@ -411,4 +411,15 @@ DEF_ASM(snez) DEF_ASM(tail) +/* Possible values for .option directive */ + DEF_ASM(arch) + DEF_ASM(rvc) + DEF_ASM(norvc) + DEF_ASM(pic) + DEF_ASM(nopic) + DEF_ASM(relax) + DEF_ASM(norelax) + DEF_ASM(push) + DEF_ASM(pop) + #undef DEF_ASM_WITH_SUFFIX diff --git a/tccasm.c b/tccasm.c index fec30846..0f518fe7 100644 --- a/tccasm.c +++ b/tccasm.c @@ -922,6 +922,29 @@ static void asm_parse_directive(TCCState *s1, int global) case TOK_ASMDIR_code64: next(); break; +#endif +#ifdef TCC_TARGET_RISCV64 + case TOK_ASMDIR_option: + next(); + switch(tok){ + case TOK_ASM_pic: + case TOK_ASM_nopic: + case TOK_ASM_relax: + case TOK_ASM_norelax: + case TOK_ASM_push: + case TOK_ASM_pop: + /* TODO: unimplemented */ + next(); + break; + case TOK_ASM_arch: + /* TODO: unimplemented, requires extra parsing */ + tcc_error("unimp .option '.%s'", get_tok_str(tok, NULL)); + break; + default: + tcc_error("unknown .option '.%s'", get_tok_str(tok, NULL)); + break; + } + break; #endif default: tcc_error("unknown assembler directive '.%s'", get_tok_str(tok, NULL)); diff --git a/tcctok.h b/tcctok.h index 6eabe256..699b67bb 100644 --- a/tcctok.h +++ b/tcctok.h @@ -202,7 +202,8 @@ /* pragma */ DEF(TOK_pack, "pack") #if !defined(TCC_TARGET_I386) && !defined(TCC_TARGET_X86_64) && \ - !defined(TCC_TARGET_ARM) && !defined(TCC_TARGET_ARM64) + !defined(TCC_TARGET_ARM) && !defined(TCC_TARGET_ARM64) && \ + !defined(TCC_TARGET_RISCV64) /* already defined for assembler */ DEF(TOK_ASM_push, "push") DEF(TOK_ASM_pop, "pop") @@ -401,6 +402,8 @@ DEF_ASMDIR(code32) #elif defined(TCC_TARGET_X86_64) DEF_ASMDIR(code64) +#elif defined(TCC_TARGET_RISCV64) + DEF_ASMDIR(option) #endif DEF_ASMDIR(short) DEF_ASMDIR(long)