summaryrefslogtreecommitdiffstatshomepage
path: root/tests/inlineasm/xtensa/asmarith.py
blob: 1c0934eb7a6316b583afb7ed21de874084e35091 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
@micropython.asm_xtensa
def f1(a2):
    abs_(a2, a2)


for value in (10, -10, 0):
    print(f1(value))


ADDMI_TEMPLATE = """
@micropython.asm_xtensa
def f1(a2) -> int:
    addmi(a2, a2, {})
print(f1(0))
"""

for value in (-32768, -32767, 32512, 32513, 0):
    try:
        exec(ADDMI_TEMPLATE.format(value))
    except SyntaxError as error:
        print(error)


@micropython.asm_xtensa
def a2(a2, a3) -> int:
    addx2(a2, a2, a3)


@micropython.asm_xtensa
def a4(a2, a3) -> int:
    addx4(a2, a2, a3)


@micropython.asm_xtensa
def a8(a2, a3) -> int:
    addx8(a2, a2, a3)


@micropython.asm_xtensa
def s2(a2, a3) -> int:
    subx2(a2, a2, a3)


@micropython.asm_xtensa
def s4(a2, a3) -> int:
    subx4(a2, a2, a3)


@micropython.asm_xtensa
def s8(a2, a3) -> int:
    subx8(a2, a2, a3)


for first, second in ((100, 100), (-100, 100), (-100, -100), (100, -100)):
    print("a2", a2(first, second))
    print("a4", a4(first, second))
    print("a8", a8(first, second))
    print("s2", s2(first, second))
    print("s4", s4(first, second))
    print("s8", s8(first, second))


@micropython.asm_xtensa
def f5(a2) -> int:
    neg(a2, a2)


for value in (0, -100, 100):
    print(f5(value))


@micropython.asm_xtensa
def f6():
    movi(a2, 0x100)
    movi(a3, 1)
    add(a2, a2, a3)
    addi(a2, a2, 1)
    addi(a2, a2, -2)
    sub(a2, a2, a3)


print(hex(f6()))


@micropython.asm_xtensa
def f7():
    movi(a2, 0x10FF)
    movi(a3, 1)
    and_(a4, a2, a3)
    or_(a4, a4, a3)
    movi(a3, 0x200)
    xor(a2, a4, a3)


print(hex(f7()))


@micropython.asm_xtensa
def f8(a2, a3):
    add_n(a2, a2, a3)


print(f8(100, 200))


@micropython.asm_xtensa
def f9(a2):
    addi_n(a2, a2, 1)


print(f9(100))


@micropython.asm_xtensa
def f10(a2, a3) -> uint:
    mull(a2, a2, a3)


print(hex(f10(0xC0000000, 2)))