From 616399c4862f8aab34705341ce8261861bae48d3 Mon Sep 17 00:00:00 2001 From: Robin Pedersen Date: Thu, 23 Feb 2023 14:44:18 +0100 Subject: [PATCH 1/2] add push/pop to 'norvc' option usage in directeds Signed-off-by: Robin Pedersen --- bsp/vectors.S | 3 ++- .../hpmcounter_basic_nostall_test.c | 2 +- .../custom/hpmcounter_basic_test/hpmcounter_basic_test.c | 2 +- .../custom/hpmcounter_hazard_test/hpmcounter_hazard_test.c | 2 +- .../custom/interrupt_bootstrap/interrupt_bootstrap.S | 2 ++ tests/programs/custom/interrupt_test/interrupt_test.c | 6 ++++++ .../riscv_arithmetic_basic_test_0.S | 3 ++- .../riscv_arithmetic_basic_test_1.S | 3 ++- tests/uvmt/test-programs/vectors.S | 4 ++++ 9 files changed, 21 insertions(+), 6 deletions(-) diff --git a/bsp/vectors.S b/bsp/vectors.S index e03ab12a07..947e4c16b1 100644 --- a/bsp/vectors.S +++ b/bsp/vectors.S @@ -15,6 +15,7 @@ */ .section .vectors, "ax" +.option push .option norvc .global vector_table @@ -51,4 +52,4 @@ vector_table: j m_fast13_irq_handler j m_fast14_irq_handler j m_fast15_irq_handler - +.option pop diff --git a/tests/programs/custom/hpmcounter_basic_nostall_test/hpmcounter_basic_nostall_test.c b/tests/programs/custom/hpmcounter_basic_nostall_test/hpmcounter_basic_nostall_test.c index 049bcbfc57..9eacdfc20c 100644 --- a/tests/programs/custom/hpmcounter_basic_nostall_test/hpmcounter_basic_nostall_test.c +++ b/tests/programs/custom/hpmcounter_basic_nostall_test/hpmcounter_basic_nostall_test.c @@ -64,7 +64,7 @@ int main(int argc, char *argv[]) volatile unsigned int mcycle_count; - __asm__ volatile(".option rvc"); + __asm__ volatile(".option rvc"); // TODO:ERROR:silabs-robin Why? Should be in Yaml cfg. ////////////////////////////////////////////////////////////// // Cycle count diff --git a/tests/programs/custom/hpmcounter_basic_test/hpmcounter_basic_test.c b/tests/programs/custom/hpmcounter_basic_test/hpmcounter_basic_test.c index 3c83c4d287..c1b6221a20 100644 --- a/tests/programs/custom/hpmcounter_basic_test/hpmcounter_basic_test.c +++ b/tests/programs/custom/hpmcounter_basic_test/hpmcounter_basic_test.c @@ -78,7 +78,7 @@ int main(int argc, char *argv[]) volatile unsigned int mcycle_count; - __asm__ volatile(".option rvc"); + __asm__ volatile(".option rvc"); // TODO:ERROR:silabs-robin Why? Should be in Yaml cfg. ////////////////////////////////////////////////////////////// // Cycle count diff --git a/tests/programs/custom/hpmcounter_hazard_test/hpmcounter_hazard_test.c b/tests/programs/custom/hpmcounter_hazard_test/hpmcounter_hazard_test.c index 56d5abb078..e3ee43cae3 100644 --- a/tests/programs/custom/hpmcounter_hazard_test/hpmcounter_hazard_test.c +++ b/tests/programs/custom/hpmcounter_hazard_test/hpmcounter_hazard_test.c @@ -60,7 +60,7 @@ int main(int argc, char *argv[]) volatile unsigned int minstret; - __asm__ volatile(".option rvc"); + __asm__ volatile(".option rvc"); // TODO:ERROR:silabs-robin Why? Should be in Yaml cfg. ////////////////////////////////////////////////////////////// // Count load use hazards diff --git a/tests/programs/custom/interrupt_bootstrap/interrupt_bootstrap.S b/tests/programs/custom/interrupt_bootstrap/interrupt_bootstrap.S index b757411076..e97627f914 100644 --- a/tests/programs/custom/interrupt_bootstrap/interrupt_bootstrap.S +++ b/tests/programs/custom/interrupt_bootstrap/interrupt_bootstrap.S @@ -61,6 +61,7 @@ _fini: .section .vectors.alt, "ax" .global alt_vector_table +.option push .option norvc .align 8 @@ -99,3 +100,4 @@ alt_vector_table: j m_fast14_irq_handler j m_fast15_irq_handler +.option pop diff --git a/tests/programs/custom/interrupt_test/interrupt_test.c b/tests/programs/custom/interrupt_test/interrupt_test.c index dfaeeaa14d..d7e8c298d1 100644 --- a/tests/programs/custom/interrupt_test/interrupt_test.c +++ b/tests/programs/custom/interrupt_test/interrupt_test.c @@ -165,6 +165,7 @@ __attribute__((interrupt ("machine"))) void u_sw_direct_irq_handler(void) { asm ( ".global alt_vector_table\n" + ".option push\n" ".option norvc\n" ".align 8\n" "alt_vector_table:\n" @@ -200,23 +201,28 @@ __attribute__((interrupt ("machine"))) void u_sw_direct_irq_handler(void) { "j m_fast13_irq_handler\n" "j m_fast14_irq_handler\n" "j m_fast15_irq_handler\n" + ".option pop\n" ); asm ( ".global alt_direct_vector_table\n" + ".option push\n" ".option norvc\n" ".align 8\n" "alt_direct_vector_table:\n" "j u_sw_direct_irq_handler\n" + ".option pop\n" ); asm ( ".global alt_direct_ecall_table\n" + ".option push\n" ".option norvc\n" ".align 8\n" "alt_direct_ecall_table:\n" "wfi\n" "j u_sw_irq_handler\n" + ".option pop\n" ); int main(int argc, char *argv[]) { diff --git a/tests/programs/custom/riscv_arithmetic_basic_test_0/riscv_arithmetic_basic_test_0.S b/tests/programs/custom/riscv_arithmetic_basic_test_0/riscv_arithmetic_basic_test_0.S index 57f6289307..b00c348a8b 100644 --- a/tests/programs/custom/riscv_arithmetic_basic_test_0/riscv_arithmetic_basic_test_0.S +++ b/tests/programs/custom/riscv_arithmetic_basic_test_0/riscv_arithmetic_basic_test_0.S @@ -11963,6 +11963,7 @@ mmode_intr_vector_15: .align 7 mtvec_handler: + .option push; .option norvc; j mmode_exception_handler j mmode_intr_vector_1 @@ -11980,7 +11981,7 @@ mtvec_handler: j mmode_intr_vector_13 j mmode_intr_vector_14 j mmode_intr_vector_15 - .option rvc; + .option pop; mmode_exception_handler: csrrw x12, 0x340, x12 diff --git a/tests/programs/custom/riscv_arithmetic_basic_test_1/riscv_arithmetic_basic_test_1.S b/tests/programs/custom/riscv_arithmetic_basic_test_1/riscv_arithmetic_basic_test_1.S index fd53ac6c9a..74c0cfb6f7 100644 --- a/tests/programs/custom/riscv_arithmetic_basic_test_1/riscv_arithmetic_basic_test_1.S +++ b/tests/programs/custom/riscv_arithmetic_basic_test_1/riscv_arithmetic_basic_test_1.S @@ -12009,6 +12009,7 @@ mmode_intr_vector_15: .align 7 mtvec_handler: + .option push; .option norvc; j mmode_exception_handler j mmode_intr_vector_1 @@ -12026,7 +12027,7 @@ mtvec_handler: j mmode_intr_vector_13 j mmode_intr_vector_14 j mmode_intr_vector_15 - .option rvc; + .option pop; mmode_exception_handler: csrrw x15, 0x340, x15 diff --git a/tests/uvmt/test-programs/vectors.S b/tests/uvmt/test-programs/vectors.S index 8a177a6918..fb51dd9f77 100644 --- a/tests/uvmt/test-programs/vectors.S +++ b/tests/uvmt/test-programs/vectors.S @@ -15,6 +15,7 @@ */ .section .vectors, "ax" +.option push .option norvc vector_table: j sw_irq_handler @@ -58,6 +59,9 @@ new vector table (which is at mtvec) */ /* j __no_irq_handler */ /* j __no_irq_handler */ +.option pop + + .section .text.vecs /* exception handling */ __no_irq_handler: From 7f30272d06a669ccf8954a1395554287fc5ede67 Mon Sep 17 00:00:00 2001 From: Robin Pedersen Date: Mon, 27 Feb 2023 13:49:46 +0100 Subject: [PATCH 2/2] remove 'option rvc' from hpmcounter tests Signed-off-by: Robin Pedersen --- .../hpmcounter_basic_nostall_test.c | 1 - .../custom/hpmcounter_basic_test/hpmcounter_basic_test.c | 1 - .../custom/hpmcounter_hazard_test/hpmcounter_hazard_test.c | 1 - 3 files changed, 3 deletions(-) diff --git a/tests/programs/custom/hpmcounter_basic_nostall_test/hpmcounter_basic_nostall_test.c b/tests/programs/custom/hpmcounter_basic_nostall_test/hpmcounter_basic_nostall_test.c index 9eacdfc20c..afff522b43 100644 --- a/tests/programs/custom/hpmcounter_basic_nostall_test/hpmcounter_basic_nostall_test.c +++ b/tests/programs/custom/hpmcounter_basic_nostall_test/hpmcounter_basic_nostall_test.c @@ -64,7 +64,6 @@ int main(int argc, char *argv[]) volatile unsigned int mcycle_count; - __asm__ volatile(".option rvc"); // TODO:ERROR:silabs-robin Why? Should be in Yaml cfg. ////////////////////////////////////////////////////////////// // Cycle count diff --git a/tests/programs/custom/hpmcounter_basic_test/hpmcounter_basic_test.c b/tests/programs/custom/hpmcounter_basic_test/hpmcounter_basic_test.c index c1b6221a20..04c3d2b6ae 100644 --- a/tests/programs/custom/hpmcounter_basic_test/hpmcounter_basic_test.c +++ b/tests/programs/custom/hpmcounter_basic_test/hpmcounter_basic_test.c @@ -78,7 +78,6 @@ int main(int argc, char *argv[]) volatile unsigned int mcycle_count; - __asm__ volatile(".option rvc"); // TODO:ERROR:silabs-robin Why? Should be in Yaml cfg. ////////////////////////////////////////////////////////////// // Cycle count diff --git a/tests/programs/custom/hpmcounter_hazard_test/hpmcounter_hazard_test.c b/tests/programs/custom/hpmcounter_hazard_test/hpmcounter_hazard_test.c index e3ee43cae3..90d1ebfc10 100644 --- a/tests/programs/custom/hpmcounter_hazard_test/hpmcounter_hazard_test.c +++ b/tests/programs/custom/hpmcounter_hazard_test/hpmcounter_hazard_test.c @@ -60,7 +60,6 @@ int main(int argc, char *argv[]) volatile unsigned int minstret; - __asm__ volatile(".option rvc"); // TODO:ERROR:silabs-robin Why? Should be in Yaml cfg. ////////////////////////////////////////////////////////////// // Count load use hazards