Message ID | 59A121F3-F675-4056-A66C-644BD917F24C@sandoe.co.uk |
---|---|
State | New |
Headers | show |
Series | testsuite, JIT, Darwin: Adjust asm tests for Mach-O. | expand |
On Wed, 2021-08-18 at 20:45 +0100, Iain Sandoe wrote: > Hi, > > This provides adjusted assembler fragments that are suitable > for x86_64 Mach-O. > > ** as an aside, I wonder if it would be possible to configure some > conditional on __ELF__, __MACH__, and CPU arch to pull in some > object-cpu.inc so that we can generalize this for all hosts. I don't know how far I want to go down this route - the purpose of the tests is to verify that the API works, analogously to inline asm in a C source file, but the asm fragments are always going to be very target- dependent, given that it's asm, and probably rather host-dependent. I took the easy way out by getting the tests working on x86_64-pc-linux- gnu (host and target), and (ahem) hoping nothing else was too badly broken. Sorry about that. If there's a simple way to clean it up that would be great. Note that the functions in the testcase code are also included by the Sphinx documentation as examples of API usage (see the asm.rst references in comments) - though for some reason that doesn't seem to be working in the built HTML docs on gcc.gnu.org. > > this version tested on x86_64-darwin, x86_64-linux, > OK for master? The patch as-is looks OK to me. Dave
diff --git a/gcc/testsuite/jit.dg/test-asm.c b/gcc/testsuite/jit.dg/test-asm.c index 35a9f9d8605..43255dc7561 100644 --- a/gcc/testsuite/jit.dg/test-asm.c +++ b/gcc/testsuite/jit.dg/test-asm.c @@ -438,6 +438,18 @@ verify_code_4 (gcc_jit_context *ctxt, gcc_jit_result *result) static void create_test_i386_basic_asm_5 (gcc_jit_context *ctxt) { +#if __APPLE__ + /* Darwin's assemblers do not support push/pop section, do not use .type + and external symbols should use __USER_LABEL_PREFIX__. */ + gcc_jit_context_add_top_level_asm (ctxt, NULL, + "\t.text\n" + "\t.globl _add_asm\n" + "_add_asm:\n" + "\tmovq %rdi, %rax\n" + "\tadd %rsi, %rax\n" + "\tret\n" + "\t# some asm here\n"); +#else /* Quote from here in docs/topics/asm.rst: example 5: jit. */ gcc_jit_context_add_top_level_asm (ctxt, NULL, "\t.pushsection .text\n" @@ -450,6 +462,7 @@ create_test_i386_basic_asm_5 (gcc_jit_context *ctxt) "\t# some asm here\n" "\t.popsection\n"); /* Quote up to here in docs/topics/asm.rst: example 5: jit. */ +#endif } static void diff --git a/gcc/testsuite/jit.dg/test-asm.cc b/gcc/testsuite/jit.dg/test-asm.cc index be487e3fb69..a3b45dacf07 100644 --- a/gcc/testsuite/jit.dg/test-asm.cc +++ b/gcc/testsuite/jit.dg/test-asm.cc @@ -400,6 +400,17 @@ static void create_test_i386_basic_asm_5 (gcc_jit_context *c_ctxt) { gccjit::context ctxt (c_ctxt); +#if __APPLE__ + /* Darwin's assemblers do not support push/pop section, do not use .type + and external symbols should use __USER_LABEL_PREFIX__. */ + ctxt.add_top_level_asm ("\t.text\n" + "\t.globl _add_asm\n" + "_add_asm:\n" + "\tmovq %rdi, %rax\n" + "\tadd %rsi, %rax\n" + "\tret\n" + "\t# some asm here\n"); +#else /* Quote from here in docs/cp/topics/asm.rst: example 5: jit. */ ctxt.add_top_level_asm ("\t.pushsection .text\n" "\t.globl add_asm\n" @@ -411,6 +422,7 @@ create_test_i386_basic_asm_5 (gcc_jit_context *c_ctxt) "\t# some asm here\n" "\t.popsection\n"); /* Quote up to here in docs/cp/topics/asm.rst: example 5: jit. */ +#endif } static void
Hi, This provides adjusted assembler fragments that are suitable for x86_64 Mach-O. ** as an aside, I wonder if it would be possible to configure some conditional on __ELF__, __MACH__, and CPU arch to pull in some object-cpu.inc so that we can generalize this for all hosts. this version tested on x86_64-darwin, x86_64-linux, OK for master? thanks Iain Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> gcc/testsuite/ChangeLog: * jit.dg/test-asm.c: Provide Mach-O fragment. * jit.dg/test-asm.cc: Likewise. --- gcc/testsuite/jit.dg/test-asm.c | 13 +++++++++++++ gcc/testsuite/jit.dg/test-asm.cc | 12 ++++++++++++ 2 files changed, 25 insertions(+)