Browse Source

BYTE instruction implementation (with bug on BYTE 0)

cl-refactor
Paweł Bylica 10 years ago
parent
commit
b39692ba72
  1. 27
      evmcc/Compiler.cpp
  2. 1
      evmcc/bytecode/byte.evm
  3. 105
      evmcc/lll/byte.lll

27
evmcc/Compiler.cpp

@ -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

@ -0,0 +1 @@
7f112233445566778899001122334455667788990011223344556677889900aabb6000137f112233445566778899001122334455667788990011223344556677889900aabb6001137f112233445566778899001122334455667788990011223344556677889900aabb6002137f112233445566778899001122334455667788990011223344556677889900aabb6003137f112233445566778899001122334455667788990011223344556677889900aabb6004137f112233445566778899001122334455667788990011223344556677889900aabb6005137f112233445566778899001122334455667788990011223344556677889900aabb6006137f112233445566778899001122334455667788990011223344556677889900aabb6007137f112233445566778899001122334455667788990011223344556677889900aabb6008137f112233445566778899001122334455667788990011223344556677889900aabb6009137f112233445566778899001122334455667788990011223344556677889900aabb600a137f112233445566778899001122334455667788990011223344556677889900aabb600b137f112233445566778899001122334455667788990011223344556677889900aabb600c137f112233445566778899001122334455667788990011223344556677889900aabb600d137f112233445566778899001122334455667788990011223344556677889900aabb600e137f112233445566778899001122334455667788990011223344556677889900aabb600f137f112233445566778899001122334455667788990011223344556677889900aabb6010137f112233445566778899001122334455667788990011223344556677889900aabb6011137f112233445566778899001122334455667788990011223344556677889900aabb6012137f112233445566778899001122334455667788990011223344556677889900aabb6013137f112233445566778899001122334455667788990011223344556677889900aabb6014137f112233445566778899001122334455667788990011223344556677889900aabb6015137f112233445566778899001122334455667788990011223344556677889900aabb6016137f112233445566778899001122334455667788990011223344556677889900aabb6017137f112233445566778899001122334455667788990011223344556677889900aabb6018137f112233445566778899001122334455667788990011223344556677889900aabb6019137f112233445566778899001122334455667788990011223344556677889900aabb601a137f112233445566778899001122334455667788990011223344556677889900aabb601b137f112233445566778899001122334455667788990011223344556677889900aabb601c137f112233445566778899001122334455667788990011223344556677889900aabb601d137f112233445566778899001122334455667788990011223344556677889900aabb601e137f112233445566778899001122334455667788990011223344556677889900aabb601f137f112233445566778899001122334455667788990011223344556677889900aabb6020137f112233445566778899001122334455667788990011223344556677889900aabb6107de13

105
evmcc/lll/byte.lll

@ -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…
Cancel
Save