forked from llvm/llvm-project
-
Notifications
You must be signed in to change notification settings - Fork 17
Open
Description
Absolute value
All of them synthesize the operation (poorly)
-
int8_t
-
int16_t
-
int24_t
-
int32_t
-
int48_t
-
int64_t
Bit reverse
-
uint48_t foo(uint48_t x) { return __builtin_bitreverse64(x) >> 16; }
uses__llbitrev
instead of__i48bitrev
(but__builtin_bitreverse32(x >> 16) | (uint48_t)__builtin_bitreverse16(x) << 32
is fine?)
Byte swap
-
int24_t foo(int24_t x) { return __builtin_bswap32(x) >> 8; }
uses__lbswap
instead of__ibswap
(__ibswap
doesn't exist yet, but probably should?) -
int48_t foo(int48_t x) { return __builtin_bswap64(x) >> 16; }
uses__llbswap
instead of__i48bswap
? (can't confirm because of Certain 48 bit operations still aren't being legalized #44 (comment))
Division
-
int8_t foo(int8_t x, int8_t y) { return x / y; }
uses__sdivs
instead of__bdivs
-
int16_t foo(int16_t x, int16_t y) { return x / y; }
uses__idivs
instead of__sdivs
Negation
-
int48_t foo(int48_t x) { return -x; }
synthesizes the operation (poorly) instead of using__i48abs
Remainder
-
int8_t foo(int8_t x, int8_t y) { return x % y; }
uses__srems
instead of__brems
-
int16_t foo(int16_t x, int16_t y) { return x % y; }
uses__irems
instead of__srems
Shift left
-
int8_t foo(int8_t x, int8_t y) { return x << y; }
uses__ishl
instead of__bshl
-
int16_t foo(int16_t x, int16_t y) { return x << y; }
uses__ishl
instead of__sshl
Shift right
-
int8_t foo(int8_t x, int8_t y) { return x >> y; }
uses__ishrs
instead of__bshl
-
uint8_t foo(uint8_t x, uint8_t y) { return x >> y; }
uses__ishru
instead of__bshru
-
int16_t foo(int16_t x, int16_t y) { return x >> y; }
uses__ishrs
instead of__sshrs
-
uint16_t foo(uint16_t x, uint16_t y) { return x >> y; }
uses__ishru
instead of__sshru
Metadata
Metadata
Assignees
Labels
No labels