Ton

Форк
0
/
asm_arg_order.fc 
113 строк · 3.0 Кб
1
tuple empty_tuple() asm "NIL";
2
forall X -> (tuple, ()) tpush(tuple t, X x) asm "TPUSH";
3

4
tuple asm_func_1(int x, int y, int z) asm "3 TUPLE";
5
tuple asm_func_2(int x, int y, int z) asm (z y x -> 0) "3 TUPLE";
6
tuple asm_func_3(int x, int y, int z) asm (y z x -> 0) "3 TUPLE";
7
tuple asm_func_4(int a, (int, (int, int)) b, int c) asm (b a c -> 0) "5 TUPLE";
8

9
(tuple, ()) asm_func_modify(tuple a, int b, int c) asm (c b a -> 0) "SWAP TPUSH SWAP TPUSH";
10

11
global tuple t;
12

13
int foo(int x) {
14
  t~tpush(x);
15
  return x * 10;
16
}
17

18
(tuple, tuple) test_old_1() method_id(11) {
19
  t = empty_tuple();
20
  tuple t2 = asm_func_1(foo(11), foo(22), foo(33));
21
  return (t, t2);
22
}
23

24
(tuple, tuple) test_old_2() method_id(12) {
25
  t = empty_tuple();
26
  tuple t2 = asm_func_2(foo(11), foo(22), foo(33));
27
  return (t, t2);
28
}
29

30
(tuple, tuple) test_old_3() method_id(13) {
31
  t = empty_tuple();
32
  tuple t2 = asm_func_3(foo(11), foo(22), foo(33));
33
  return (t, t2);
34
}
35

36
(tuple, tuple) test_old_4() method_id(14) {
37
  t = empty_tuple();
38
  tuple t2 = empty_tuple();
39
  ;; This actually computes left-to-right even without compute-asm-ltr
40
  tuple t2 = asm_func_4(foo(11), (foo(22), (foo(33), foo(44))), foo(55));
41
  return (t, t2);
42
}
43

44
(tuple, tuple) test_old_modify() method_id(15) {
45
  t = empty_tuple();
46
  tuple t2 = empty_tuple();
47
  t2~asm_func_modify(foo(22), foo(33));
48
  return (t, t2);
49
}
50

51
(tuple, tuple) test_old_dot() method_id(16) {
52
  t = empty_tuple();
53
  tuple t2 = foo(11).asm_func_3(foo(22), foo(33));
54
  return (t, t2);
55
}
56

57
#pragma compute-asm-ltr;
58

59
(tuple, tuple) test_new_1() method_id(21) {
60
  t = empty_tuple();
61
  tuple t2 = asm_func_1(foo(11), foo(22), foo(33));
62
  return (t, t2);
63
}
64

65
(tuple, tuple) test_new_2() method_id(22) {
66
  t = empty_tuple();
67
  tuple t2 = asm_func_2(foo(11), foo(22), foo(33));
68
  return (t, t2);
69
}
70

71
(tuple, tuple) test_new_3() method_id(23) {
72
  t = empty_tuple();
73
  tuple t2 = asm_func_3(foo(11), foo(22), foo(33));
74
  return (t, t2);
75
}
76

77
(tuple, tuple) test_new_4() method_id(24) {
78
  t = empty_tuple();
79
  tuple t2 = asm_func_4(foo(11), (foo(22), (foo(33), foo(44))), foo(55));
80
  return (t, t2);
81
}
82

83
(tuple, tuple) test_new_modify() method_id(25) {
84
  t = empty_tuple();
85
  tuple t2 = empty_tuple();
86
  t2~asm_func_modify(foo(22), foo(33));
87
  return (t, t2);
88
}
89

90
(tuple, tuple) test_new_dot() method_id(26) {
91
  t = empty_tuple();
92
  tuple t2 = foo(11).asm_func_3(foo(22), foo(33));
93
  return (t, t2);
94
}
95

96
() main() {
97
}
98

99
{-
100
    method_id | in | out
101
TESTCASE | 11 |    | [ 11 22 33 ] [ 110 220 330 ]
102
TESTCASE | 12 |    | [ 33 22 11 ] [ 330 220 110 ]
103
TESTCASE | 13 |    | [ 22 33 11 ] [ 220 330 110 ]
104
TESTCASE | 14 |    | [ 11 22 33 44 55 ] [ 220 330 440 110 550 ]
105
TESTCASE | 15 |    | [ 33 22 ] [ 220 330 ]
106
TESTCASE | 16 |    | [ 22 33 11 ] [ 220 330 110 ]
107
TESTCASE | 21 |    | [ 11 22 33 ] [ 110 220 330 ]
108
TESTCASE | 22 |    | [ 11 22 33 ] [ 330 220 110 ]
109
TESTCASE | 23 |    | [ 11 22 33 ] [ 220 330 110 ]
110
TESTCASE | 24 |    | [ 11 22 33 44 55 ] [ 220 330 440 110 550 ]
111
TESTCASE | 25 |    | [ 22 33 ] [ 220 330 ]
112
TESTCASE | 26 |    | [ 11 22 33 ] [ 220 330 110 ]
113
-}
114

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.