mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-20 11:46: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:
|
||||
{
|
||||
auto byteNum = stack.pop();
|
||||
|
||||
// TODO
|
||||
//auto value = stack.pop();
|
||||
const auto byteNum = stack.pop();
|
||||
auto value = stack.pop();
|
||||
|
||||
/*
|
||||
if (byteNum < 32) - use select
|
||||
{
|
||||
value <<= byteNum*8;
|
||||
value >>= (31-byteNum)*8;
|
||||
push value
|
||||
}
|
||||
else
|
||||
{
|
||||
push 0
|
||||
value <<= byteNum*8
|
||||
value >>= 31*8
|
||||
push value
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
|||
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