blob: a0477ad5d425b1ad08825b95fcd47788540a2a2b [file] [log] [blame]
/* { dg-do compile } */
/* { dg-options "-O" } */
/* { dg-final { check-function-bodies "**" "" } } */
#include <stdint.h>
#define H3 ((uint64_t) 0xffff << 48)
#define H2 ((uint64_t) 0xffff << 32)
#define H1 ((uint64_t) 0xffff << 16)
#define H0 ((uint64_t) 0xffff)
/*
** f1:
** mov w0, w1
** movk w0, #0x9876(?:, lsl #?0)?
** ret
*/
uint32_t
f1 (uint32_t dummy, uint32_t x)
{
return (x & 0xffff0000) | 0x9876;
}
/*
** f2:
** movk w0, #0x1234, lsl #?16
** ret
*/
uint32_t
f2 (uint32_t x)
{
return (x & 0xffff) | 0x12340000;
}
/*
** g1:
** movk x0, #0x1234, lsl #?0
** ret
*/
uint64_t
g1 (uint64_t x)
{
return (x & (H3 | H2 | H1)) | 0x1234;
}
/*
** g2:
** movk x0, #0x900e, lsl #?16
** ret
*/
uint64_t
g2 (uint64_t x)
{
return (x & (H3 | H2 | H0)) | ((uint64_t) 0x900e << 16);
}
/*
** g3:
** movk x0, #0xee33, lsl #?32
** ret
*/
uint64_t
g3 (uint64_t x)
{
return (x & (H3 | H1 | H0)) | ((uint64_t) 0xee33 << 32);
}
/*
** g4:
** mov x0, x1
** movk x0, #0x7654, lsl #?48
** ret
*/
uint64_t
g4 (uint64_t dummy, uint64_t x)
{
return (x & (H2 | H1 | H0)) | ((uint64_t) 0x7654 << 48);
}