blob: 2f62e839545145156be3f3273762189e037ebbcd [file] [log] [blame]
/* { dg-do compile } */
/* { dg-options "-O" } */
/* { dg-require-effective-target arm_v8_1m_mve_ok } */
/* { dg-add-options arm_v8_1m_mve } */
/* { dg-additional-options "-mfloat-abi=hard" } *
/* { dg-final { check-function-bodies "**" "" } } */
/*
** r_w:
** vmov r0, s0
** bx lr
*/
void
r_w (float s0)
{
register float r0 asm ("r0");
r0 = s0;
asm volatile ("" :: "r" (r0));
}
/*
** w_r:
** vmov s0, r0
** bx lr
*/
float
w_r ()
{
register float r0 asm ("r0");
asm volatile ("" : "=r" (r0));
return r0;
}
/*
** w_w:
** vmov.f32 s1, s0
** bx lr
*/
void
w_w (float s0)
{
register float s1 asm ("s1");
s1 = s0;
asm volatile ("" :: "w" (s1));
}
/*
** r_m_m64:
** sub (r[0-9]+), r0, #256
** ldr r1, \[\1\] @ float
** bx lr
*/
void
r_m_m64 (float *r0)
{
register float r1 asm ("r1");
r1 = r0[-64];
asm volatile ("" :: "r" (r1));
}
/*
** r_m_m63:
** ldr r1, \[r0, #-252\] @ float
** bx lr
*/
void
r_m_m63 (float *r0)
{
register float r1 asm ("r1");
r1 = r0[-63];
asm volatile ("" :: "r" (r1));
}
/*
** r_m_m1:
** ldr r1, \[r0, #-4\] @ float
** bx lr
*/
void
r_m_m1 (float *r0)
{
register float r1 asm ("r1");
r1 = r0[-1];
asm volatile ("" :: "r" (r1));
}
/*
** r_m_0:
** ldr r1, \[r0\] @ float
** bx lr
*/
void
r_m_0 (float *r0)
{
register float r1 asm ("r1");
r1 = r0[0];
asm volatile ("" :: "r" (r1));
}
/*
** r_m_1:
** ldr r1, \[r0, #4\] @ float
** bx lr
*/
void
r_m_1 (float *r0)
{
register float r1 asm ("r1");
r1 = r0[1];
asm volatile ("" :: "r" (r1));
}
/*
** r_m_255:
** ldr r1, \[r0, #1020\] @ float
** bx lr
*/
void
r_m_255 (float *r0)
{
register float r1 asm ("r1");
r1 = r0[255];
asm volatile ("" :: "r" (r1));
}
/*
** r_m_256:
** add (r[0-9]+), r0, #1024
** ldr r1, \[r0\] @ float
** bx lr
*/
void
r_m_256 (float *r0)
{
register float r1 asm ("r1");
r1 = r0[256];
asm volatile ("" :: "r" (r1));
}
/* ??? This could be done in one instruction, but without mve.fp,
it makes more sense for memory_operand to enforce the GPR range. */
/*
** w_m_m64:
** sub (r[0-9]+), r0, #256
** vldr.32 s0, \[\1\]
** bx lr
*/
void
w_m_m64 (float *r0)
{
register float s0 asm ("s0");
s0 = r0[-64];
asm volatile ("" :: "w" (s0));
}
/*
** w_m_m63:
** vldr.32 s0, \[r0, #-252\]
** bx lr
*/
void
w_m_m63 (float *r0)
{
register float s0 asm ("s0");
s0 = r0[-63];
asm volatile ("" :: "w" (s0));
}
/*
** w_m_m1:
** vldr.32 s0, \[r0, #-4\]
** bx lr
*/
void
w_m_m1 (float *r0)
{
register float s0 asm ("s0");
s0 = r0[-1];
asm volatile ("" :: "w" (s0));
}
/*
** w_m_0:
** vldr.32 s0, \[r0\]
** bx lr
*/
void
w_m_0 (float *r0)
{
register float s0 asm ("s0");
s0 = r0[0];
asm volatile ("" :: "w" (s0));
}
/*
** w_m_1:
** vldr.32 s0, \[r0, #4\]
** bx lr
*/
void
w_m_1 (float *r0)
{
register float s0 asm ("s0");
s0 = r0[1];
asm volatile ("" :: "w" (s0));
}
/*
** w_m_255:
** vldr.32 s0, \[r0, #1020\]
** bx lr
*/
void
w_m_255 (float *r0)
{
register float s0 asm ("s0");
s0 = r0[255];
asm volatile ("" :: "w" (s0));
}
/*
** w_m_256:
** add (r[0-9]+), r0, #1024
** vldr.32 s0, \[\1\]
** bx lr
*/
void
w_m_256 (float *r0)
{
register float s0 asm ("s0");
s0 = r0[256];
asm volatile ("" :: "w" (s0));
}
/*
** m_m64_r:
** sub (r[0-9]+), r0, #256
** str r1, \[\1\] @ float
** bx lr
*/
void
m_m64_r (float *r0)
{
register float r1 asm ("r1");
asm volatile ("" : "=r" (r1));
r0[-64] = r1;
}
/*
** m_m63_r:
** str r1, \[r0, #-252\] @ float
** bx lr
*/
void
m_m63_r (float *r0)
{
register float r1 asm ("r1");
asm volatile ("" : "=r" (r1));
r0[-63] = r1;
}
/*
** m_m1_r:
** str r1, \[r0, #-4\] @ float
** bx lr
*/
void
m_m1_r (float *r0)
{
register float r1 asm ("r1");
asm volatile ("" : "=r" (r1));
r0[-1] = r1;
}
/*
** m_0_r:
** str r1, \[r0\] @ float
** bx lr
*/
void
m_0_r (float *r0)
{
register float r1 asm ("r1");
asm volatile ("" : "=r" (r1));
r0[0] = r1;
}
/*
** m_1_r:
** str r1, \[r0, #4\] @ float
** bx lr
*/
void
m_1_r (float *r0)
{
register float r1 asm ("r1");
asm volatile ("" : "=r" (r1));
r0[1] = r1;
}
/*
** m_255_r:
** str r1, \[r0, #1020\] @ float
** bx lr
*/
void
m_255_r (float *r0)
{
register float r1 asm ("r1");
asm volatile ("" : "=r" (r1));
r0[255] = r1;
}
/*
** m_256_r:
** add (r[0-9]+), r0, #1024
** str r1, \[r0\] @ float
** bx lr
*/
void
m_256_r (float *r0)
{
register float r1 asm ("r1");
asm volatile ("" : "=r" (r1));
r0[256] = r1;
}
/* ??? This could be done in one instruction, but without mve.fp,
it makes more sense for memory_operand to enforce the GPR range. */
/*
** m_m64_w:
** sub (r[0-9]+), r0, #256
** vstr.32 s0, \[\1\]
** bx lr
*/
void
m_m64_w (float *r0)
{
register float s0 asm ("s0");
asm volatile ("" : "=w" (s0));
r0[-64] = s0;
}
/*
** m_m63_w:
** vstr.32 s0, \[r0, #-252\]
** bx lr
*/
void
m_m63_w (float *r0)
{
register float s0 asm ("s0");
asm volatile ("" : "=w" (s0));
r0[-63] = s0;
}
/*
** m_m1_w:
** vstr.32 s0, \[r0, #-4\]
** bx lr
*/
void
m_m1_w (float *r0)
{
register float s0 asm ("s0");
asm volatile ("" : "=w" (s0));
r0[-1] = s0;
}
/*
** m_0_w:
** vstr.32 s0, \[r0\]
** bx lr
*/
void
m_0_w (float *r0)
{
register float s0 asm ("s0");
asm volatile ("" : "=w" (s0));
r0[0] = s0;
}
/*
** m_1_w:
** vstr.32 s0, \[r0, #4\]
** bx lr
*/
void
m_1_w (float *r0)
{
register float s0 asm ("s0");
asm volatile ("" : "=w" (s0));
r0[1] = s0;
}
/*
** m_255_w:
** vstr.32 s0, \[r0, #1020\]
** bx lr
*/
void
m_255_w (float *r0)
{
register float s0 asm ("s0");
asm volatile ("" : "=w" (s0));
r0[255] = s0;
}
/*
** m_256_w:
** add (r[0-9]+), r0, #1024
** vstr.32 s0, \[\1\]
** bx lr
*/
void
m_256_w (float *r0)
{
register float s0 asm ("s0");
asm volatile ("" : "=w" (s0));
r0[256] = s0;
}