mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-21 12:16:44 +00:00
BYTE instruction implementation (with bug on BYTE 0)
This commit is contained in:
parent
710b734236
commit
320add062e
3 changed files with 122 additions and 11 deletions
|
|
@ -345,24 +345,29 @@ std::unique_ptr<llvm::Module> Compiler::compile(const dev::bytes& bytecode)
|
||||||
|
|
||||||
case Instruction::BYTE:
|
case Instruction::BYTE:
|
||||||
{
|
{
|
||||||
auto byteNum = stack.pop();
|
const auto byteNum = stack.pop();
|
||||||
|
auto value = stack.pop();
|
||||||
// TODO
|
|
||||||
//auto value = stack.pop();
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if (byteNum < 32) - use select
|
if (byteNum < 32) - use select
|
||||||
{
|
{
|
||||||
value <<= byteNum*8;
|
value <<= byteNum*8
|
||||||
value >>= (31-byteNum)*8;
|
value >>= 31*8
|
||||||
push value
|
push value
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
push 0
|
|
||||||
}
|
}
|
||||||
|
else push 0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// TODO: Shifting by 0 gives wrong results as of this bug http://llvm.org/bugs/show_bug.cgi?id=16439
|
||||||
|
|
||||||
|
auto shbits = builder.CreateShl(byteNum, builder.getIntN(256, 3));
|
||||||
|
value = builder.CreateShl(value, shbits);
|
||||||
|
value = builder.CreateLShr(value, builder.getIntN(256, 31 * 8));
|
||||||
|
|
||||||
|
auto byteNumValid = builder.CreateICmpULT(byteNum, builder.getIntN(256, 32));
|
||||||
|
value = builder.CreateSelect(byteNumValid, value, builder.getIntN(256, 0));
|
||||||
|
stack.push(value);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
1
evmcc/bytecode/byte.evm
Normal file
1
evmcc/bytecode/byte.evm
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
7f112233445566778899001122334455667788990011223344556677889900aabb6000137f112233445566778899001122334455667788990011223344556677889900aabb6001137f112233445566778899001122334455667788990011223344556677889900aabb6002137f112233445566778899001122334455667788990011223344556677889900aabb6003137f112233445566778899001122334455667788990011223344556677889900aabb6004137f112233445566778899001122334455667788990011223344556677889900aabb6005137f112233445566778899001122334455667788990011223344556677889900aabb6006137f112233445566778899001122334455667788990011223344556677889900aabb6007137f112233445566778899001122334455667788990011223344556677889900aabb6008137f112233445566778899001122334455667788990011223344556677889900aabb6009137f112233445566778899001122334455667788990011223344556677889900aabb600a137f112233445566778899001122334455667788990011223344556677889900aabb600b137f112233445566778899001122334455667788990011223344556677889900aabb600c137f112233445566778899001122334455667788990011223344556677889900aabb600d137f112233445566778899001122334455667788990011223344556677889900aabb600e137f112233445566778899001122334455667788990011223344556677889900aabb600f137f112233445566778899001122334455667788990011223344556677889900aabb6010137f112233445566778899001122334455667788990011223344556677889900aabb6011137f112233445566778899001122334455667788990011223344556677889900aabb6012137f112233445566778899001122334455667788990011223344556677889900aabb6013137f112233445566778899001122334455667788990011223344556677889900aabb6014137f112233445566778899001122334455667788990011223344556677889900aabb6015137f112233445566778899001122334455667788990011223344556677889900aabb6016137f112233445566778899001122334455667788990011223344556677889900aabb6017137f112233445566778899001122334455667788990011223344556677889900aabb6018137f112233445566778899001122334455667788990011223344556677889900aabb6019137f112233445566778899001122334455667788990011223344556677889900aabb601a137f112233445566778899001122334455667788990011223344556677889900aabb601b137f112233445566778899001122334455667788990011223344556677889900aabb601c137f112233445566778899001122334455667788990011223344556677889900aabb601d137f112233445566778899001122334455667788990011223344556677889900aabb601e137f112233445566778899001122334455667788990011223344556677889900aabb601f137f112233445566778899001122334455667788990011223344556677889900aabb6020137f112233445566778899001122334455667788990011223344556677889900aabb6107de13
|
||||||
105
evmcc/lll/byte.lll
Normal file
105
evmcc/lll/byte.lll
Normal file
|
|
@ -0,0 +1,105 @@
|
||||||
|
|
||||||
|
(asm
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
0
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
1
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
2
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
3
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
4
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
5
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
6
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
7
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
8
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
9
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
10
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
11
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
12
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
13
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
14
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
15
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
16
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
17
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
18
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
19
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
20
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
21
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
22
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
23
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
24
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
25
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
26
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
27
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
28
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
29
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
30
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
31
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
32
|
||||||
|
BYTE
|
||||||
|
0x112233445566778899001122334455667788990011223344556677889900aabb
|
||||||
|
2014
|
||||||
|
BYTE
|
||||||
|
)
|
||||||
Loading…
Reference in a new issue