mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
GH-98831: Elaborate some cases_generator tests (#101299)
* Make macro test more elaborate * Add test for 'register inst()'
This commit is contained in:
parent
498598e8c2
commit
395871e511
1 changed files with 41 additions and 13 deletions
|
@ -333,20 +333,21 @@ def test_super_instruction():
|
|||
|
||||
def test_macro_instruction():
|
||||
input = """
|
||||
inst(OP1, (counter/1, arg --)) {
|
||||
op1();
|
||||
inst(OP1, (counter/1, arg1 -- interim)) {
|
||||
interim = op1(arg1);
|
||||
}
|
||||
op(OP2, (extra/2, arg --)) {
|
||||
op2();
|
||||
op(OP2, (extra/2, arg2, interim -- res)) {
|
||||
res = op2(arg2, interim);
|
||||
}
|
||||
macro(OP) = OP1 + cache/2 + OP2;
|
||||
"""
|
||||
output = """
|
||||
TARGET(OP1) {
|
||||
PyObject *arg = PEEK(1);
|
||||
PyObject *arg1 = PEEK(1);
|
||||
PyObject *interim;
|
||||
uint16_t counter = read_u16(&next_instr[0].cache);
|
||||
op1();
|
||||
STACK_SHRINK(1);
|
||||
interim = op1(arg1);
|
||||
POKE(1, interim);
|
||||
JUMPBY(1);
|
||||
DISPATCH();
|
||||
}
|
||||
|
@ -355,17 +356,24 @@ def test_macro_instruction():
|
|||
PyObject *_tmp_1 = PEEK(1);
|
||||
PyObject *_tmp_2 = PEEK(2);
|
||||
{
|
||||
PyObject *arg = _tmp_1;
|
||||
uint16_t counter = read_u16(&next_instr[0].cache);
|
||||
op1();
|
||||
PyObject *arg1 = _tmp_1;
|
||||
PyObject *interim;
|
||||
uint16_t counter = re
|
||||
ad_u16(&next_instr[0].cache);
|
||||
interim = op1(arg1);
|
||||
_tmp_1 = interim;
|
||||
}
|
||||
{
|
||||
PyObject *arg = _tmp_2;
|
||||
PyObject *interim = _tmp_1;
|
||||
PyObject *arg2 = _tmp_2;
|
||||
PyObject *res;
|
||||
uint32_t extra = read_u32(&next_instr[3].cache);
|
||||
op2();
|
||||
res = op2(arg2, interim);
|
||||
_tmp_2 = res;
|
||||
}
|
||||
JUMPBY(5);
|
||||
STACK_SHRINK(2);
|
||||
STACK_SHRINK(1);
|
||||
POKE(1, _tmp_2);
|
||||
DISPATCH();
|
||||
}
|
||||
"""
|
||||
|
@ -448,3 +456,23 @@ def test_array_error_if():
|
|||
}
|
||||
"""
|
||||
run_cases_test(input, output)
|
||||
|
||||
def test_register():
|
||||
input = """
|
||||
register inst(OP, (counter/1, left, right -- result)) {
|
||||
result = op(left, right);
|
||||
}
|
||||
"""
|
||||
output = """
|
||||
TARGET(OP) {
|
||||
PyObject *left = REG(oparg1);
|
||||
PyObject *right = REG(oparg2);
|
||||
PyObject *result;
|
||||
uint16_t counter = read_u16(&next_instr[0].cache);
|
||||
result = op(left, right);
|
||||
Py_XSETREF(REG(oparg3), result);
|
||||
JUMPBY(1);
|
||||
DISPATCH();
|
||||
}
|
||||
"""
|
||||
run_cases_test(input, output)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue