return "weak";
case GCC_JIT_FN_ATTRIBUTE_NONNULL:
return "nonnull";
+ case GCC_JIT_FN_ATTRIBUTE_ARM_CMSE_NONSECURE_CALL:
+ return "cmse_nonsecure_call";
+ case GCC_JIT_FN_ATTRIBUTE_ARM_CMSE_NONSECURE_ENTRY:
+ return "cmse_nonsecure_entry";
+ case GCC_JIT_FN_ATTRIBUTE_ARM_PCS:
+ return "pcs";
+ case GCC_JIT_FN_ATTRIBUTE_AVR_INTERRUPT:
+ return "interrupt";
+ case GCC_JIT_FN_ATTRIBUTE_AVR_NOBLOCK:
+ return "noblock";
+ case GCC_JIT_FN_ATTRIBUTE_AVR_SIGNAL:
+ return "signal";
+ case GCC_JIT_FN_ATTRIBUTE_GCN_AMDGPU_HSA_KERNEL:
+ return "amdgpu_hsa_kernel";
+ case GCC_JIT_FN_ATTRIBUTE_MSP430_INTERRUPT:
+ return "interrupt";
+ case GCC_JIT_FN_ATTRIBUTE_NVPTX_KERNEL:
+ return "kernel";
+ case GCC_JIT_FN_ATTRIBUTE_RISCV_INTERRUPT:
+ return "interrupt";
+ case GCC_JIT_FN_ATTRIBUTE_X86_FAST_CALL:
+ return "fastcall";
+ case GCC_JIT_FN_ATTRIBUTE_X86_INTERRUPT:
+ return "interrupt";
+ case GCC_JIT_FN_ATTRIBUTE_X86_MS_ABI:
+ return "ms_abi";
+ case GCC_JIT_FN_ATTRIBUTE_X86_STDCALL:
+ return "stdcall";
+ case GCC_JIT_FN_ATTRIBUTE_X86_SYSV_ABI:
+ return "sysv_abi";
+ case GCC_JIT_FN_ATTRIBUTE_X86_THIS_CALL:
+ return "thiscall";
case GCC_JIT_FN_ATTRIBUTE_MAX:
return NULL;
}
"GCC_JIT_FN_ATTRIBUTE_CONST",
"GCC_JIT_FN_ATTRIBUTE_WEAK",
"GCC_JIT_FN_ATTRIBUTE_NONNULL",
+ "GCC_JIT_FN_ATTRIBUTE_ARM_CMSE_NONSECURE_CALL",
+ "GCC_JIT_FN_ATTRIBUTE_ARM_CMSE_NONSECURE_ENTRY",
+ "GCC_JIT_FN_ATTRIBUTE_ARM_PCS",
+ "GCC_JIT_FN_ATTRIBUTE_AVR_INTERRUPT",
+ "GCC_JIT_FN_ATTRIBUTE_AVR_NOBLOCK",
+ "GCC_JIT_FN_ATTRIBUTE_AVR_SIGNAL",
+ "GCC_JIT_FN_ATTRIBUTE_GCN_AMDGPU_HSA_KERNEL",
+ "GCC_JIT_FN_ATTRIBUTE_MSP430_INTERRUPT",
+ "GCC_JIT_FN_ATTRIBUTE_NVPTX_KERNEL",
+ "GCC_JIT_FN_ATTRIBUTE_RISCV_INTERRUPT",
+ "GCC_JIT_FN_ATTRIBUTE_X86_FAST_CALL",
+ "GCC_JIT_FN_ATTRIBUTE_X86_INTERRUPT",
+ "GCC_JIT_FN_ATTRIBUTE_X86_MS_ABI",
+ "GCC_JIT_FN_ATTRIBUTE_X86_STDCALL",
+ "GCC_JIT_FN_ATTRIBUTE_X86_SYSV_ABI",
+ "GCC_JIT_FN_ATTRIBUTE_X86_THIS_CALL",
};
std::string
GCC_JIT_FN_ATTRIBUTE_WEAK,
GCC_JIT_FN_ATTRIBUTE_NONNULL,
+ // ARM attributes.
+ GCC_JIT_FN_ATTRIBUTE_ARM_CMSE_NONSECURE_CALL,
+ GCC_JIT_FN_ATTRIBUTE_ARM_CMSE_NONSECURE_ENTRY,
+ GCC_JIT_FN_ATTRIBUTE_ARM_PCS,
+
+ // AVR attributes.
+ GCC_JIT_FN_ATTRIBUTE_AVR_INTERRUPT,
+ GCC_JIT_FN_ATTRIBUTE_AVR_NOBLOCK,
+ GCC_JIT_FN_ATTRIBUTE_AVR_SIGNAL,
+
+ // AMD GCN attributes.
+ GCC_JIT_FN_ATTRIBUTE_GCN_AMDGPU_HSA_KERNEL,
+
+ // MSP430 attributes.
+ GCC_JIT_FN_ATTRIBUTE_MSP430_INTERRUPT,
+
+ // Nvidia PTX attributes.
+ GCC_JIT_FN_ATTRIBUTE_NVPTX_KERNEL,
+
+ // RISC-V attributes.
+ GCC_JIT_FN_ATTRIBUTE_RISCV_INTERRUPT,
+
+ // x86 attributes.
+ GCC_JIT_FN_ATTRIBUTE_X86_FAST_CALL,
+ GCC_JIT_FN_ATTRIBUTE_X86_INTERRUPT,
+ GCC_JIT_FN_ATTRIBUTE_X86_MS_ABI,
+ GCC_JIT_FN_ATTRIBUTE_X86_STDCALL,
+ GCC_JIT_FN_ATTRIBUTE_X86_SYSV_ABI,
+ GCC_JIT_FN_ATTRIBUTE_X86_THIS_CALL,
+
/* Maximum value of this enum, should always be last. */
GCC_JIT_FN_ATTRIBUTE_MAX,
};
hooks provided by each test case. */
#define COMBINED_TEST
+/* test-abi.c: This can't be in the testcases array as it
+ is target-specific. */
+
/* test-accessing-bitfield.c */
#define create_code create_code_accessing_bitfield
#define verify_code verify_code_accessing_bitfield
--- /dev/null
+/* { dg-do compile { target x86_64-*-* } } */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "libgccjit.h"
+
+#define TEST_COMPILING_TO_FILE
+#define OUTPUT_KIND GCC_JIT_OUTPUT_KIND_ASSEMBLER
+#define OUTPUT_FILENAME "output-of-test-restrict.c.s"
+#include "harness.h"
+
+void
+create_code (gcc_jit_context *ctxt, void *user_data)
+{
+ /* Let's try to inject the equivalent of:
+__attribute__((__ms_abi__))
+int t(int x, int y) {
+ return x * y;
+}
+ */
+ gcc_jit_type *int_type =
+ gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_INT);
+
+ gcc_jit_param *x =
+ gcc_jit_context_new_param (ctxt, NULL, int_type, "x");
+ gcc_jit_param *y =
+ gcc_jit_context_new_param (ctxt, NULL, int_type, "y");
+ gcc_jit_param *params[2] = {x, y};
+
+ gcc_jit_function *func_t =
+ gcc_jit_context_new_function (ctxt, NULL,
+ GCC_JIT_FUNCTION_EXPORTED, int_type, "t",
+ 2, params, 0);
+ gcc_jit_function_add_attribute (func_t,
+ GCC_JIT_FN_ATTRIBUTE_X86_MS_ABI);
+
+ gcc_jit_block *block = gcc_jit_function_new_block (func_t, NULL);
+
+ gcc_jit_rvalue *result =
+ gcc_jit_context_new_binary_op (
+ ctxt, NULL, GCC_JIT_BINARY_OP_MULT,
+ int_type,
+ gcc_jit_param_as_rvalue (x),
+ gcc_jit_param_as_rvalue (y));
+
+ gcc_jit_block_end_with_return (block, NULL, result);
+}
+
+/* { dg-final { jit-verify-output-file-was-created "" } } */
+/* { dg-final { jit-verify-assembler-output "movl\\s+%ecx, %eax" } } */