/**** Controlling the Compilation Driver. */
#define ASM_SPEC "%{mbig-endian:-EB} %{!mbig-endian:-EL} %{mxbpf:-mxbpf} " \
- "%{masm=pseudoc:-mdialect=pseudoc}"
+ "%{masm=normal:-mdialect=normal} " \
+ "%{masm=pseudoc:-mdialect=pseudoc} " \
+ "%{!masm=normal:%{!masm=pseudoc:-mdialect=pseudoc}}"
#define LINK_SPEC "%{mbig-endian:-EB} %{!mbig-endian:-EL}"
#define LIB_SPEC ""
#define STARTFILE_SPEC ""
Enum(bpf_isa) String(v4) Value(ISA_V4)
masm=
-Target RejectNegative Joined Var(asm_dialect) Enum(asm_dialect) Init(ASM_NORMAL)
+Target RejectNegative Joined Var(asm_dialect) Enum(asm_dialect) Init(ASM_PSEUDOC)
Use given assembler dialect.
Enum
@opindex masm=@var{dialect}
@item -masm=@var{dialect}
Outputs assembly instructions using eBPF selected @var{dialect}. The default
-is @samp{normal}.
+is @samp{pseudoc}.
Supported values for @var{dialect} are:
not enabled. */
/* { dg-do compile } */
-/* { dg-options "-mno-alu32" } */
+/* { dg-options "-mno-alu32 -masm=normal" } */
int foo (int a, int b)
{
/* Check add and sub instructions. */
/* { dg-do compile } */
-/* { dg-options "" } */
+/* { dg-options "-masm=normal" } */
long foo (long x, long y)
{
/* { dg-do compile } */
-/* { dg-options "-mv3-atomics -O2" } */
+/* { dg-options "-mv3-atomics -O2 -masm=normal" } */
int
foo (int *p, int *expected, int desired)
/* { dg-do compile } */
-/* { dg-options "-mno-v3-atomics -O2" } */
+/* { dg-options "-mno-v3-atomics -O2 -masm=normal" } */
int
foo (int *p, int *expected, int desired)
/* Test 64-bit atomic-fetch-op instructions. */
/* { dg-do compile } */
-/* { dg-options "-mv3-atomics -O2" } */
+/* { dg-options "-mv3-atomics -O2 -masm=normal" } */
long val;
/* Test 32-bit atomic-fetch-op instructions. */
/* { dg-do compile } */
-/* { dg-options "-mv3-atomics -O2" } */
+/* { dg-options "-mv3-atomics -O2 -masm=normal" } */
int val;
/* Test atomic-fetch-op instructions are disabled with -mno-v3-atomics. */
/* { dg-do compile } */
-/* { dg-options "-mno-v3-atomics -O2" } */
+/* { dg-options "-mno-v3-atomics -O2 -masm=normal" } */
long val;
/* Test 64-bit non-fetch atomic operations. */
/* { dg-do compile } */
-/* { dg-options "-mv3-atomics -O2" } */
+/* { dg-options "-mv3-atomics -O2 -masm=normal" } */
long val;
/* Test 32-bit non-fetch atomic operations. */
/* { dg-do compile } */
-/* { dg-options "-mv3-atomics -O2" } */
+/* { dg-options "-mv3-atomics -O2 -masm=normal" } */
int val;
/* Test that atomic insns are properly disabled with -mno-v3-atomics. */
/* { dg-do compile } */
-/* { dg-options "-mno-v3-atomics -O2" } */
+/* { dg-options "-mno-v3-atomics -O2 -masm=normal" } */
int val;
/* Test atomic exchange instruction. */
/* { dg-do compile } */
-/* { dg-options "-mv3-atomics -O2" } */
+/* { dg-options "-mv3-atomics -O2 -masm=normal" } */
int foo (int *p, int *new)
{
/* Test atomic exchange instruction is disabled with -mno-v3-atomics. */
/* { dg-do compile } */
-/* { dg-options "-mno-v3-atomics -O2" } */
+/* { dg-options "-mno-v3-atomics -O2 -masm=normal" } */
int foo (int *p, int *new)
{
/* Basic test for kernel_helper attribute BTF information. */
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf" } */
+/* { dg-options "-O0 -dA -gbtf -masm=normal" } */
extern int foo_helper(int) __attribute((kernel_helper(42)));
extern int foo_nohelper(int);
/* { dg-do compile } */
-/* { dg-options "-mlittle-endian -mcpu=v3" } */
+/* { dg-options "-mlittle-endian -mcpu=v3 -masm=normal" } */
unsigned short in16 = 0x1234U;
unsigned int in32 = 0x12345678U;
/* { dg-do compile } */
-/* { dg-options "-mlittle-endian -mcpu=v4" } */
+/* { dg-options "-mlittle-endian -mcpu=v4 -masm=normal" } */
unsigned short in16 = 0x1234U;
unsigned int in32 = 0x12345678U;
/* { dg-do compile } */
-/* { dg-options "-O2 -dA -gbtf -mno-co-re" } */
+/* { dg-options "-O2 -dA -gbtf -mno-co-re -masm=normal" } */
struct T {
int a;
/* { dg-do compile } */
-/* { dg-options "-O2 -dA -gbtf" } */
+/* { dg-options "-O2 -dA -gbtf -masm=normal" } */
struct T {
int a;
/* { dg-do compile } */
-/* { dg-options "-O0 -std=gnu99" } */
+/* { dg-options "-O0 -std=gnu99 -masm=normal" } */
void foo ()
{
for BPF CO-RE support. */
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
struct S {
int a;
for BPF CO-RE support. */
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
union U {
int a;
generated. */
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
struct O {
int e;
LHS and both LHS and RHS of assignment. */
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
struct T {
int a;
LHS and both LHS and RHS of assignment. */
/* { dg-do compile } */
-/* { dg-options "-O2 -dA -gbtf -mco-re" } */
+/* { dg-options "-O2 -dA -gbtf -mco-re -masm=normal" } */
struct U {
int c;
LHS and both LHS and RHS of assignment. */
/* { dg-do compile } */
-/* { dg-options "-O2 -dA -gbtf -mco-re" } */
+/* { dg-options "-O2 -dA -gbtf -mco-re -masm=normal" } */
struct U {
int c;
for BPF CO-RE support. */
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
struct S {
int a;
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
struct S {
int a;
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
struct S {
int a;
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
struct T {
int a;
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
#include "core-support.h"
/* { dg-do compile } */
-/* { dg-options "-O2 -dA -gbtf -mco-re" } */
+/* { dg-options "-O2 -dA -gbtf -mco-re -masm=normal" } */
#include "core-support.h"
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
#include "core-support.h"
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
struct S {
int a;
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
struct T {
int a;
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
struct T {
int a;
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
struct T {
int a;
/* { dg-do compile } */
-/* { dg-options "-O2 -dA -gbtf -mco-re" } */
+/* { dg-options "-O2 -dA -gbtf -mco-re -masm=normal" } */
struct S {
unsigned int a1: 7;
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
struct F {
int bar;
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
struct F {
int bar;
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
enum {
FIELD_EXISTENCE = 2,
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re -mbig-endian" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -mbig-endian -masm=normal" } */
struct S {
int x1: 6;
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re -mlittle-endian" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -mlittle-endian -masm=normal" } */
struct S {
int x1: 6;
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
struct S {
char c;
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
struct S {
unsigned int a1: 7;
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
struct S {
int x1: 6;
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
struct S {
int x;
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
enum {
FIELD_SIGNEDNESS = 3,
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
enum {
FIELD_SIGNEDNESS = 3,
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
struct S {
unsigned int a1: 7;
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
#include "core-support.h"
/* { dg-do compile } */
-/* { dg-options "-O0 -dA -gbtf -mco-re" } */
+/* { dg-options "-O0 -dA -gbtf -mco-re -masm=normal" } */
#include "core-support.h"
/* { dg-do compile } */
-/* { dg-options "-mlittle-endian" } */
+/* { dg-options "-mlittle-endian -masm=normal" } */
double f;
double a() { f = 1.0; return 1.0; }
/* { dg-do compile } */
-/* { dg-options "-mbig-endian" } */
+/* { dg-options "-mbig-endian -masm=normal" } */
double f;
double a() { f = 1.0; return 1.0; }
/* { dg-do compile } */
-/* { dg-options "-mlittle-endian" } */
+/* { dg-options "-mlittle-endian -masm=normal" } */
float f;
float a() { f = 1.0; return 1.0; }
/* { dg-do compile } */
-/* { dg-options "-O2" "-minline-memops-threshold=256"} */
+/* { dg-options "-O2 -masm=normal -minline-memops-threshold=256" } */
char buf[512];
if -mjmp32 is not enabled. */
/* { dg-do compile } */
-/* { dg-options "-mno-jmpext -mno-jmp32" } */
+/* { dg-options "-mno-jmpext -mno-jmp32 -masm=normal" } */
int foo (int a, int b)
{
with a constant instead of register + offset. */
/* { dg-do compile } */
-/* { dg-options "-O2" } */
+/* { dg-options "-O2 -masm=normal" } */
/* { dg-final { scan-assembler-times "ldxdw\t%r.,\\\[%r.\\+\[0-9\]+\\\]" 1 } } */
/* { dg-final { scan-assembler-not "ldxdw\t%r.,\[0-9\]+" } } */
/* Check negr and negr32 instructions. */
/* { dg-do compile } */
-/* { dg-options "-malu32" } */
+/* { dg-options "-malu32 -masm=normal" } */
long foo (long a, long b, int x, int y)
{
/* { dg-do compile } */
-/* { dg-options "-std=gnu99 --patchable-function-entry=2,1" } */
+/* { dg-options "-std=gnu99 --patchable-function-entry=2,1 -masm=normal" } */
/* The purpose of this test is to make sure the right instruction is
generated for NOPs. See bpf.md for a description on why this is
/* Verify that sdiv instruction is used for xBPF. */
/* { dg-do compile } */
-/* { dg-options "-O0 -mcpu=v4" } */
+/* { dg-options "-O0 -mcpu=v4 -masm=normal" } */
void
foo ()
/* Check ISA V4 signed load instructions. */
/* { dg-do compile } */
-/* { dg-options "-mcpu=v4 -O2" } */
+/* { dg-options "-mcpu=v4 -O2 -masm=normal" } */
long foo (char *p1, short *p2, int *p3)
{
/* Verify that smod instruction is used for xBPF. */
/* { dg-do compile } */
-/* { dg-options "-O0 -mcpu=v4" } */
+/* { dg-options "-O0 -mcpu=v4 -masm=normal" } */
void
foo ()
/* Check signed mov instructions. */
/* { dg-do compile } */
-/* { dg-options "-mcpu=v4 -O2" } */
+/* { dg-options "-mcpu=v4 -O2 -masm=normal" } */
long
foo (char a, short b, int c, unsigned long d)
/* Check signed 32-bit mov instructions. */
/* { dg-do compile } */
-/* { dg-options "-mcpu=v4 -O2" } */
+/* { dg-options "-mcpu=v4 -O2 -masm=normal" } */
int
foo (unsigned char a, unsigned short b)
/* { dg-do compile } */
+/* { dg-options "-masm=normal" } */
long delta;
long *val;
/* { dg-do compile } */
-/* { dg-options "-mxbpf" } */
+/* { dg-options "-mxbpf -masm=normal" } */
/* GCC should generate an indirect call instruction (call %REG)
when targetting xBPF. */