mirror of
https://github.com/status-im/evmc.git
synced 2025-02-24 00:48:09 +00:00
Merge pull request #435 from ethereum/instruction_metrics
Change values in instruction metrics
This commit is contained in:
commit
4ee8ff83e5
@ -9,5 +9,5 @@
|
||||
|
||||
int main()
|
||||
{
|
||||
return evmc_get_instruction_metrics_table(EVMC_BYZANTIUM)[OP_STOP].num_stack_returned_items;
|
||||
return evmc_get_instruction_metrics_table(EVMC_BYZANTIUM)[OP_STOP].gas_cost;
|
||||
}
|
||||
|
@ -188,11 +188,14 @@ struct evmc_instruction_metrics
|
||||
/** The instruction gas cost. */
|
||||
int16_t gas_cost;
|
||||
|
||||
/** The number of items the instruction pops from the EVM stack before execution. */
|
||||
int8_t num_stack_arguments;
|
||||
/** The minimum number of the EVM stack items required for the instruction. */
|
||||
int8_t stack_height_required;
|
||||
|
||||
/** The number of items the instruction pushes to the EVM stack after execution. */
|
||||
int8_t num_stack_returned_items;
|
||||
/**
|
||||
* The EVM stack height change caused by the instruction execution,
|
||||
* i.e. stack height _after_ execution - stack height _before_ execution.
|
||||
*/
|
||||
int8_t stack_height_change;
|
||||
};
|
||||
|
||||
/**
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -8,8 +8,8 @@
|
||||
|
||||
bool operator==(const evmc_instruction_metrics& a, const evmc_instruction_metrics& b) noexcept
|
||||
{
|
||||
return a.gas_cost == b.gas_cost && a.num_stack_arguments == b.num_stack_arguments &&
|
||||
a.num_stack_returned_items == b.num_stack_returned_items;
|
||||
return a.gas_cost == b.gas_cost && a.stack_height_required == b.stack_height_required &&
|
||||
a.stack_height_change == b.stack_height_change;
|
||||
}
|
||||
|
||||
TEST(instructions, name_gas_cost_equivalence)
|
||||
@ -159,8 +159,8 @@ TEST(instructions, byzantium_hard_fork)
|
||||
}
|
||||
|
||||
EXPECT_EQ(b[OP_REVERT].gas_cost, 0);
|
||||
EXPECT_EQ(b[OP_REVERT].num_stack_arguments, 2);
|
||||
EXPECT_EQ(b[OP_REVERT].num_stack_returned_items, 0);
|
||||
EXPECT_EQ(b[OP_REVERT].stack_height_required, 2);
|
||||
EXPECT_EQ(b[OP_REVERT].stack_height_change, -2);
|
||||
EXPECT_EQ(sd[OP_REVERT].gas_cost, 0);
|
||||
EXPECT_EQ(bn[OP_REVERT], std::string{"REVERT"});
|
||||
EXPECT_TRUE(sdn[OP_REVERT] == nullptr);
|
||||
@ -209,20 +209,20 @@ TEST(instructions, constantinople_hard_fork)
|
||||
{
|
||||
const auto m = c[op];
|
||||
EXPECT_EQ(m.gas_cost, 3);
|
||||
EXPECT_EQ(m.num_stack_arguments, 2);
|
||||
EXPECT_EQ(m.num_stack_returned_items, 1);
|
||||
EXPECT_EQ(m.stack_height_required, 2);
|
||||
EXPECT_EQ(m.stack_height_change, -1);
|
||||
}
|
||||
|
||||
EXPECT_EQ(c[OP_CREATE2].gas_cost, 32000);
|
||||
EXPECT_EQ(c[OP_CREATE2].num_stack_arguments, 4);
|
||||
EXPECT_EQ(c[OP_CREATE2].num_stack_returned_items, 1);
|
||||
EXPECT_EQ(c[OP_CREATE2].stack_height_required, 4);
|
||||
EXPECT_EQ(c[OP_CREATE2].stack_height_change, -3);
|
||||
EXPECT_EQ(b[OP_CREATE2].gas_cost, 0);
|
||||
EXPECT_EQ(cn[OP_CREATE2], std::string{"CREATE2"});
|
||||
EXPECT_TRUE(bn[OP_CREATE2] == nullptr);
|
||||
|
||||
EXPECT_EQ(c[OP_EXTCODEHASH].gas_cost, 400);
|
||||
EXPECT_EQ(c[OP_EXTCODEHASH].num_stack_arguments, 1);
|
||||
EXPECT_EQ(c[OP_EXTCODEHASH].num_stack_returned_items, 1);
|
||||
EXPECT_EQ(c[OP_EXTCODEHASH].stack_height_required, 1);
|
||||
EXPECT_EQ(c[OP_EXTCODEHASH].stack_height_change, 0);
|
||||
EXPECT_EQ(b[OP_EXTCODEHASH].gas_cost, 0);
|
||||
EXPECT_EQ(cn[OP_EXTCODEHASH], std::string{"EXTCODEHASH"});
|
||||
EXPECT_TRUE(bn[OP_EXTCODEHASH] == nullptr);
|
||||
@ -267,15 +267,15 @@ TEST(instructions, istanbul_hard_fork)
|
||||
}
|
||||
|
||||
EXPECT_EQ(i[OP_CHAINID].gas_cost, 2);
|
||||
EXPECT_EQ(i[OP_CHAINID].num_stack_arguments, 0);
|
||||
EXPECT_EQ(i[OP_CHAINID].num_stack_returned_items, 1);
|
||||
EXPECT_EQ(i[OP_CHAINID].stack_height_required, 0);
|
||||
EXPECT_EQ(i[OP_CHAINID].stack_height_change, 1);
|
||||
EXPECT_EQ(p[OP_CHAINID].gas_cost, 0);
|
||||
EXPECT_EQ(in[OP_CHAINID], std::string{"CHAINID"});
|
||||
EXPECT_TRUE(pn[OP_CHAINID] == nullptr);
|
||||
|
||||
EXPECT_EQ(i[OP_SELFBALANCE].gas_cost, 5);
|
||||
EXPECT_EQ(i[OP_SELFBALANCE].num_stack_arguments, 0);
|
||||
EXPECT_EQ(i[OP_SELFBALANCE].num_stack_returned_items, 1);
|
||||
EXPECT_EQ(i[OP_SELFBALANCE].stack_height_required, 0);
|
||||
EXPECT_EQ(i[OP_SELFBALANCE].stack_height_change, 1);
|
||||
EXPECT_EQ(p[OP_SELFBALANCE].gas_cost, 0);
|
||||
EXPECT_EQ(in[OP_SELFBALANCE], std::string{"SELFBALANCE"});
|
||||
EXPECT_TRUE(pn[OP_SELFBALANCE] == nullptr);
|
||||
|
Loading…
x
Reference in New Issue
Block a user