Viewing file: armv8_1m-fp16-move-1.c (5.83 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* { dg-do compile } */ /* { dg-options "-O -mfp16-format=ieee" } */ /* { 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.f16 r0, s0 @ __fp16 ** bx lr */ void r_w (_Float16 s0) { register _Float16 r0 asm ("r0"); r0 = s0; asm volatile ("" :: "r" (r0)); }
/* ** w_r: ** vmov.f16 s0, r0 @ __fp16 ** bx lr */ _Float16 w_r () { register _Float16 r0 asm ("r0"); asm volatile ("" : "=r" (r0)); return r0; }
/* ** w_w: ** vmov s1, s0 @ __fp16 ** bx lr */ void w_w (_Float16 s0) { register _Float16 s1 asm ("s1"); s1 = s0; asm volatile ("" :: "w" (s1)); }
/* ** r_m_m128: ** sub (r[0-9]+), r0, #256 ** ldrh r1, \[\1\] @ __fp16 ** bx lr */ void r_m_m128 (_Float16 *r0) { register _Float16 r1 asm ("r1"); r1 = r0[-128]; asm volatile ("" :: "r" (r1)); }
/* ** r_m_m127: ** ldrh r1, \[r0, #-254\] @ __fp16 ** bx lr */ void r_m_m127 (_Float16 *r0) { register _Float16 r1 asm ("r1"); r1 = r0[-127]; asm volatile ("" :: "r" (r1)); }
/* ** r_m_m1: ** ldrh r1, \[r0, #-2\] @ __fp16 ** bx lr */ void r_m_m1 (_Float16 *r0) { register _Float16 r1 asm ("r1"); r1 = r0[-1]; asm volatile ("" :: "r" (r1)); }
/* ** r_m_0: ** ldrh r1, \[r0\] @ __fp16 ** bx lr */ void r_m_0 (_Float16 *r0) { register _Float16 r1 asm ("r1"); r1 = r0[0]; asm volatile ("" :: "r" (r1)); }
/* ** r_m_1: ** ldrh r1, \[r0, #2\] @ __fp16 ** bx lr */ void r_m_1 (_Float16 *r0) { register _Float16 r1 asm ("r1"); r1 = r0[1]; asm volatile ("" :: "r" (r1)); }
/* ** r_m_255: ** ldrh r1, \[r0, #510\] @ __fp16 ** bx lr */ void r_m_255 (_Float16 *r0) { register _Float16 r1 asm ("r1"); r1 = r0[255]; asm volatile ("" :: "r" (r1)); }
/* ** r_m_256: ** ldrh r1, \[r0, #512\] @ __fp16 ** bx lr */ void r_m_256 (_Float16 *r0) { register _Float16 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_m128: ** sub (r[0-9]+), r0, #256 ** vldr.16 s0, \[\1\] ** bx lr */ void w_m_m128 (_Float16 *r0) { register _Float16 s0 asm ("s0"); s0 = r0[-128]; asm volatile ("" :: "w" (s0)); }
/* ** w_m_m127: ** vldr.16 s0, \[r0, #-254\] ** bx lr */ void w_m_m127 (_Float16 *r0) { register _Float16 s0 asm ("s0"); s0 = r0[-127]; asm volatile ("" :: "w" (s0)); }
/* ** w_m_m1: ** vldr.16 s0, \[r0, #-2\] ** bx lr */ void w_m_m1 (_Float16 *r0) { register _Float16 s0 asm ("s0"); s0 = r0[-1]; asm volatile ("" :: "w" (s0)); }
/* ** w_m_0: ** vldr.16 s0, \[r0\] ** bx lr */ void w_m_0 (_Float16 *r0) { register _Float16 s0 asm ("s0"); s0 = r0[0]; asm volatile ("" :: "w" (s0)); }
/* ** w_m_1: ** vldr.16 s0, \[r0, #2\] ** bx lr */ void w_m_1 (_Float16 *r0) { register _Float16 s0 asm ("s0"); s0 = r0[1]; asm volatile ("" :: "w" (s0)); }
/* ** w_m_255: ** vldr.16 s0, \[r0, #510\] ** bx lr */ void w_m_255 (_Float16 *r0) { register _Float16 s0 asm ("s0"); s0 = r0[255]; asm volatile ("" :: "w" (s0)); }
/* ** w_m_256: ** add (r[0-9]+), r0, #512 ** vldr.16 s0, \[\1\] ** bx lr */ void w_m_256 (_Float16 *r0) { register _Float16 s0 asm ("s0"); s0 = r0[256]; asm volatile ("" :: "w" (s0)); }
/* ** m_m128_r: ** sub (r[0-9]+), r0, #256 ** strh r1, \[\1\] @ __fp16 ** bx lr */ void m_m128_r (_Float16 *r0) { register _Float16 r1 asm ("r1"); asm volatile ("" : "=r" (r1)); r0[-128] = r1; }
/* ** m_m127_r: ** strh r1, \[r0, #-254\] @ __fp16 ** bx lr */ void m_m127_r (_Float16 *r0) { register _Float16 r1 asm ("r1"); asm volatile ("" : "=r" (r1)); r0[-127] = r1; }
/* ** m_m1_r: ** strh r1, \[r0, #-2\] @ __fp16 ** bx lr */ void m_m1_r (_Float16 *r0) { register _Float16 r1 asm ("r1"); asm volatile ("" : "=r" (r1)); r0[-1] = r1; }
/* ** m_0_r: ** strh r1, \[r0\] @ __fp16 ** bx lr */ void m_0_r (_Float16 *r0) { register _Float16 r1 asm ("r1"); asm volatile ("" : "=r" (r1)); r0[0] = r1; }
/* ** m_1_r: ** strh r1, \[r0, #2\] @ __fp16 ** bx lr */ void m_1_r (_Float16 *r0) { register _Float16 r1 asm ("r1"); asm volatile ("" : "=r" (r1)); r0[1] = r1; }
/* ** m_255_r: ** strh r1, \[r0, #510\] @ __fp16 ** bx lr */ void m_255_r (_Float16 *r0) { register _Float16 r1 asm ("r1"); asm volatile ("" : "=r" (r1)); r0[255] = r1; }
/* ** m_256_r: ** strh r1, \[r0, #512\] @ __fp16 ** bx lr */ void m_256_r (_Float16 *r0) { register _Float16 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_m128_w: ** sub (r[0-9]+), r0, #256 ** vstr.16 s0, \[\1\] ** bx lr */ void m_m128_w (_Float16 *r0) { register _Float16 s0 asm ("s0"); asm volatile ("" : "=w" (s0)); r0[-128] = s0; }
/* ** m_m127_w: ** vstr.16 s0, \[r0, #-254\] ** bx lr */ void m_m127_w (_Float16 *r0) { register _Float16 s0 asm ("s0"); asm volatile ("" : "=w" (s0)); r0[-127] = s0; }
/* ** m_m1_w: ** vstr.16 s0, \[r0, #-2\] ** bx lr */ void m_m1_w (_Float16 *r0) { register _Float16 s0 asm ("s0"); asm volatile ("" : "=w" (s0)); r0[-1] = s0; }
/* ** m_0_w: ** vstr.16 s0, \[r0\] ** bx lr */ void m_0_w (_Float16 *r0) { register _Float16 s0 asm ("s0"); asm volatile ("" : "=w" (s0)); r0[0] = s0; }
/* ** m_1_w: ** vstr.16 s0, \[r0, #2\] ** bx lr */ void m_1_w (_Float16 *r0) { register _Float16 s0 asm ("s0"); asm volatile ("" : "=w" (s0)); r0[1] = s0; }
/* ** m_255_w: ** vstr.16 s0, \[r0, #510\] ** bx lr */ void m_255_w (_Float16 *r0) { register _Float16 s0 asm ("s0"); asm volatile ("" : "=w" (s0)); r0[255] = s0; }
/* ** m_256_w: ** add (r[0-9]+), r0, #512 ** vstr.16 s0, \[\1\] ** bx lr */ void m_256_w (_Float16 *r0) { register _Float16 s0 asm ("s0"); asm volatile ("" : "=w" (s0)); r0[256] = s0; }
|