contract C { function preincr_u8(uint8 a) public pure returns (uint8) { return ++a + a; } function postincr_u8(uint8 a) public pure returns (uint8) { return a++ + a; } function predecr_u8(uint8 a) public pure returns (uint8) { return --a + a; } function postdecr_u8(uint8 a) public pure returns (uint8) { return a-- + a; } function preincr_s8(int8 a) public pure returns (int8 ret1, int8 ret2) { ret1 = ++a; ret2 = a; } function postincr_s8(int8 a) public pure returns (int8 ret1, int8 ret2) { ret1 = a++; ret2 = a; } function predecr_s8(int8 a) public pure returns (int8 ret1, int8 ret2) { ret1 = --a; ret2 = a; } function postdecr_s8(int8 a) public pure returns (int8 ret1, int8 ret2) { ret1 = a--; ret2 = a; } function preincr(uint a) public pure returns (uint) { return ++a + a; } function postincr(uint a) public pure returns (uint) { return a++ + a; } function predecr(uint a) public pure returns (uint) { return --a + a; } function postdecr(uint a) public pure returns (uint) { return a-- + a; } function not(bool a) public pure returns (bool) { return !a; } function bitnot(int256 a) public pure returns (int256) { return ~a; } function bitnot_u8(uint8 a) public pure returns (uint256 ret) { a = ~a; assembly { // Tests that the lower bit parts are cleaned up ret := a } } function bitnot_s8() public pure returns (int256 ret) { int8 a; assembly { a := 0x9C } a = ~a; assembly { // Tests that the lower bit parts are cleaned up ret := a } } function negate(int256 a) public pure returns (int256) { return -a; } function negate_s8(int8 a) public pure returns (int8) { return -a; } function negate_s16(int16 a) public pure returns (int16) { return -a; } } // ==== // compileViaYul: true // compileToEwasm: also // ---- // preincr_s8(int8): 128 -> FAILURE // postincr_s8(int8): 128 -> FAILURE // preincr_s8(int8): 127 -> FAILURE, hex"4e487b71", 0x11 // postincr_s8(int8): 127 -> FAILURE, hex"4e487b71", 0x11 // preincr_s8(int8): 126 -> 127, 127 // postincr_s8(int8): 126 -> 126, 127 // predecr_s8(int8): -128 -> FAILURE, hex"4e487b71", 0x11 // postdecr_s8(int8): -128 -> FAILURE, hex"4e487b71", 0x11 // predecr_s8(int8): -127 -> -128, -128 // postdecr_s8(int8): -127 -> -127, -128 // preincr_s8(int8): -5 -> -4, -4 // postincr_s8(int8): -5 -> -5, -4 // predecr_s8(int8): -5 -> -6, -6 // postdecr_s8(int8): -5 -> -5, -6 // preincr_u8(uint8): 255 -> FAILURE, hex"4e487b71", 0x11 // postincr_u8(uint8): 255 -> FAILURE, hex"4e487b71", 0x11 // preincr_u8(uint8): 254 -> FAILURE, hex"4e487b71", 0x11 // postincr_u8(uint8): 254 -> FAILURE, hex"4e487b71", 0x11 // predecr_u8(uint8): 0 -> FAILURE, hex"4e487b71", 0x11 // postdecr_u8(uint8): 0 -> FAILURE, hex"4e487b71", 0x11 // predecr_u8(uint8): 1 -> 0 // postdecr_u8(uint8): 1 -> 1 // preincr_u8(uint8): 2 -> 6 // postincr_u8(uint8): 2 -> 5 // predecr_u8(uint8): 2 -> 2 // postdecr_u8(uint8): 2 -> 3 // preincr(uint256): 2 -> 6 // postincr(uint256): 2 -> 5 // predecr(uint256): 2 -> 2 // postdecr(uint256): 2 -> 3 // not(bool): true -> false // not(bool): false -> true // bitnot(int256): 5 -> -6 // bitnot(int256): 10 -> -11 // bitnot(int256): 0 -> -1 // bitnot(int256): -100 -> 99 // bitnot_u8(uint8): 100 -> 155 // bitnot_s8() -> 99 // negate(int256): -57896044618658097711785492504343953926634992332820282019728792003956564819968 -> FAILURE, hex"4e487b71", 0x11 // negate(int256): -57896044618658097711785492504343953926634992332820282019728792003956564819967 -> 57896044618658097711785492504343953926634992332820282019728792003956564819967 // negate(int256): 0 -> 0 // negate(int256): 1 -> -1 // negate(int256): -1 -> 1 // negate_s8(int8): -128 -> FAILURE, hex"4e487b71", 0x11 // negate_s8(int8): -138 -> FAILURE // negate_s8(int8): -127 -> 127 // negate_s8(int8): 127 -> -127 // negate_s16(int16): -32768 -> FAILURE, hex"4e487b71", 0x11 // negate_s16(int16): -32767 -> 32767