sim: eBPF simulator
[deliverable/binutils-gdb.git] / sim / testsuite / sim / bpf / alu.s
1 # mach: bpf
2 # output: pass\nexit 0 (0x0)\n
3 ;;; alu.s
4 ;;; Tests for ALU64 BPF instructions in simulator
5
6 .include "testutils.inc"
7
8 .text
9 .global main
10 .type main, @function
11 main:
12 mov %r1, 0
13 mov %r2, -1
14
15 ;; add
16 add %r1, 1
17 add %r2, -1
18 add %r1, %r2
19 fail_ne %r1, -1
20
21 ;; sub
22 sub %r1, %r1
23 fail_ne %r1, 0
24 sub %r1, 10
25 sub %r2, %r1
26 fail_ne %r2, 8
27
28 ;; mul
29 mul %r2, %r2 ; r2 = 64
30 mul %r2, 3 ; r2 = 192
31 mov %r1, -3
32 mul %r1, %r2 ; r1 = -576
33 mul %r2, 0
34 fail_ne %r1, -576
35 fail_ne %r2, 0
36 mul %r1, %r1
37 mul %r1, %r1
38 fail_ne %r1, 110075314176
39
40 ;; div
41 div %r2, %r1
42 fail_ne %r2, 0
43 div %r1, -10000
44 fail_ne %r1, -11007531
45 div %r1, %r1
46 fail_ne %r1, 1
47
48 ;; and
49 lddw %r1, 0xaaaaaaaa55555555
50 and %r1, 0x55aaaaaa ; we still only have 32-bit imm.
51 fail_ne %r1, 0x0000000055000000
52 lddw %r2, 0x5555555a5aaaaaaa
53 and %r2, %r1
54 fail_ne %r2, 0x0000000050000000
55
56 ;; or
57 or %r2, 0xdeadbeef
58 fail_ne %r2, 0xffffffffdeadbeef ; 0xdeadbeef gets sign extended
59 lddw %r1, 0xdead00000000beef
60 lddw %r2, 0x0000123456780000
61 or %r1, %r2
62 fail_ne %r1, 0xdead12345678beef
63
64 ;; lsh
65 mov %r1, 0xdeadbeef
66 lsh %r1, 11
67 fail_ne %r1, 0xfffffef56df77800 ; because deadbeef gets sign ext.
68 mov %r2, 21
69 lsh %r1, %r2
70 fail_ne %r1, 0xdeadbeef00000000
71
72 ;; rsh
73 rsh %r1, 11
74 fail_ne %r1, 0x001bd5b7dde00000 ; 0xdeadbeef 00000000 >> 0xb
75 rsh %r1, %r2
76 fail_ne %r1, 0x00000000deadbeef
77
78 ;; arsh
79 arsh %r1, 8
80 fail_ne %r1, 0x0000000000deadbe
81 lsh %r1, 40 ; r1 = 0xdead be00 0000 0000
82 arsh %r1, %r2 ; r1 arsh (r2 == 21)
83 fail_ne %r1, 0xfffffef56df00000
84
85 ;; mod
86 mov %r1, 1025
87 mod %r1, -16
88 fail_ne %r1, 1
89 mov %r1, -25
90 mov %r2, 5
91 mod %r1, %r2
92 fail_ne %r1, 0
93
94 ;; xor
95 xor %r1, %r2
96 fail_ne %r1, 5
97 xor %r1, 0x7eadbeef
98 fail_ne %r1, 0x7eadbeea
99 xor %r1, %r1
100 fail_ne %r1, 0
101
102 ;; neg
103 neg %r2
104 fail_ne %r2, -5
105 mov %r1, -1025
106 neg %r1
107 fail_ne %r1, 1025
108
109 pass
This page took 0.032703 seconds and 4 git commands to generate.