blob: 04fd0f14b6a6c14d6ecc806190b190c824bef749 (
plain)
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
|
# Pure Data Packet - scaf optimization rules.
# Copyright (c) by Tom Schouten <tom@zwizwa.be>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
# this file contains scaf source optimization rules for scaf compiler
# applied after kernel word inlining and before compilation to asm
# one rule that's not in here, and is the responsability for the
# final compilation step: "word ;" is "jmp word" instead of "call word ret"
# TODO: think about order!
# no discrimination between pre inline and post inline optimization ops yet
# pre inline optimizations
"over xor" -> "overxor"
"over and" -> "overand"
"over or" -> "overor"
"drop 1" -> "dropone"
"drop 0" -> "dropzero"
"over add" -> "overadd"
"over addc" -> "overaddc"
"dup !a0" -> "dupsta0"
"dup !a1" -> "dupsta1"
"dup !a2" -> "dupsta2"
"dup !a3" -> "dupsta3"
"drop @a0" -> "droplda0"
"drop @a1" -> "droplda1"
"drop @a2" -> "droplda2"
"drop @a3" -> "droplda3"
"drop ?anz" -> "dropisnonzero4"
"drop ?anz4" -> "dropisnonzero4"
"drop ?anz3" -> "dropisnonzero3"
"drop ?anz2" -> "dropisnonzero2"
"drop ?anz1" -> "dropisnonzero1"
"drop @-+" -> "dropldTL"
"drop @0+" -> "dropldTM"
"drop @++" -> "dropldTR"
"drop @-0" -> "dropldML"
"drop @00" -> "dropldMM"
"drop @+0" -> "dropldMR"
"drop @--" -> "dropldBL"
"drop @0-" -> "dropldBM"
"drop @+-" -> "dropldBR"
# post inline optimizations
"dup drop" -> ""
"swap drop" -> "nip"
"dup swap" -> "dup"
"drop dup" -> "dropdup"
"drop over" -> "dropover"
"nip dup" -> "nipdup"
|