--- tme/ic/m68k/m68k-iset-expand.pl 2018/04/24 16:37:52 1.1 +++ tme/ic/m68k/m68k-iset-expand.pl 2018/04/24 16:41:49 1.1.1.3 @@ -1,9 +1,40 @@ #! /usr/local/bin/perl -w +# $Id: m68k-iset-expand.pl,v 1.1.1.3 2018/04/24 16:41:49 root Exp $ + # m68k-inst-expand.pl - expands the m68k instruction templates into # full instruction word patterns and their decodings: -# $Header: /var/lib/cvsd/tme/tme/ic/m68k/m68k-iset-expand.pl,v 1.1 2018/04/24 16:37:52 root Exp $ +# +# Copyright (c) 2002, 2003 Matt Fredette +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. All advertising materials mentioning features or use of this software +# must display the following acknowledgement: +# This product includes software developed by Matt Fredette. +# 4. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# # globals: $debug = 0; @@ -350,6 +381,26 @@ for($line = 1; defined($_ = ); $l next; } + # EXCEPTION: a move of an address register to a predecrement + # or postincrement EA with that same address register, must + # store the original value of the address register. since the + # predecrement and postincrement code in the executer updates + # the address register before the move has happened, we wrap + # the normal move function in another that gives an op1 + # argument that is the original value of the address register: + if ($func =~ /^move_srp[di]\.S/) { + $func = 'move.S'; + } + if ($func eq 'move.S' + && substr($pattern, (15 - 5), 6) eq '001'.substr($pattern, (15 - 11), 3)) { + if (substr($pattern, (15 - 8), 3) eq '100') { + $func = 'move_srpd.S'; + } + elsif (substr($pattern, (15 - 8), 3) eq '011') { + $func = 'move_srpi.S'; + } + } + # the function name: if ($func =~ /^(.*)\.([sS])$/) { die "stdin:$line: $func with no size field?\n"