(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
movk_2.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O" } */
       3  /* { dg-final { check-function-bodies "**" "" } } */
       4  
       5  #include <stdint.h>
       6  
       7  #define H3 ((uint64_t) 0xffff << 48)
       8  #define H2 ((uint64_t) 0xffff << 32)
       9  #define H1 ((uint64_t) 0xffff << 16)
      10  #define H0 ((uint64_t) 0xffff)
      11  
      12  /*
      13  ** f1:
      14  **	mov	w0, w1
      15  **	movk	w0, #0x9876(?:, lsl #?0)?
      16  **	ret
      17  */
      18  uint32_t
      19  f1 (uint32_t dummy, uint32_t x)
      20  {
      21    return (x & 0xffff0000) | 0x9876;
      22  }
      23  
      24  /*
      25  ** f2:
      26  **	movk	w0, #0x1234, lsl #?16
      27  **	ret
      28  */
      29  uint32_t
      30  f2 (uint32_t x)
      31  {
      32    return (x & 0xffff) | 0x12340000;
      33  }
      34  
      35  /*
      36  ** g1:
      37  **	movk	x0, #0x1234, lsl #?0
      38  **	ret
      39  */
      40  uint64_t
      41  g1 (uint64_t x)
      42  {
      43    return (x & (H3 | H2 | H1)) | 0x1234;
      44  }
      45  
      46  /*
      47  ** g2:
      48  **	movk	x0, #0x900e, lsl #?16
      49  **	ret
      50  */
      51  uint64_t
      52  g2 (uint64_t x)
      53  {
      54    return (x & (H3 | H2 | H0)) | ((uint64_t) 0x900e << 16);
      55  }
      56  
      57  /*
      58  ** g3:
      59  **	movk	x0, #0xee33, lsl #?32
      60  **	ret
      61  */
      62  uint64_t
      63  g3 (uint64_t x)
      64  {
      65    return (x & (H3 | H1 | H0)) | ((uint64_t) 0xee33 << 32);
      66  }
      67  
      68  /*
      69  ** g4:
      70  **	mov	x0, x1
      71  **	movk	x0, #0x7654, lsl #?48
      72  **	ret
      73  */
      74  uint64_t
      75  g4 (uint64_t dummy, uint64_t x)
      76  {
      77    return (x & (H2 | H1 | H0)) | ((uint64_t) 0x7654 << 48);
      78  }