# Pure Data Packet - scaf optimization rules. # Copyright (c) by Tom Schouten # # 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"