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