(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
memset-strict-align-1.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O2 -mstrict-align" } */
       3  
       4  struct s { char x[255]; };
       5  void foo (struct s *);
       6  void bar (void) { struct s s1 = {}; foo (&s1); }
       7  
       8  /* memset (s1 = {}, sizeof = 255) should be expanded out
       9     such that there are no overlap stores when -mstrict-align
      10     is in use.
      11     so 7 pairs of 16 bytes stores (224 bytes).
      12     1 16 byte stores
      13     1 8 byte store
      14     1 4 byte store
      15     1 2 byte store
      16     1 1 byte store
      17     */
      18  
      19  /* { dg-final { scan-assembler-times "stp\tq" 7 } } */
      20  /* { dg-final { scan-assembler-times "str\tq" 1 } } */
      21  /* { dg-final { scan-assembler-times "str\txzr" 1 } } */
      22  /* { dg-final { scan-assembler-times "str\twzr" 1 } } */
      23  /* { dg-final { scan-assembler-times "strh\twzr" 1 } } */
      24  /* { dg-final { scan-assembler-times "strb\twzr" 1 } } */
      25  
      26  /* Also one store pair for the frame-pointer and the LR. */
      27  /* { dg-final { scan-assembler-times "stp\tx" 1 } } */
      28