head 1.3; access; symbols pkgsrc-2013Q2:1.3.0.24 pkgsrc-2013Q2-base:1.3 pkgsrc-2012Q4:1.3.0.22 pkgsrc-2012Q4-base:1.3 pkgsrc-2011Q4:1.3.0.20 pkgsrc-2011Q4-base:1.3 pkgsrc-2011Q2:1.3.0.18 pkgsrc-2011Q2-base:1.3 pkgsrc-2009Q4:1.3.0.16 pkgsrc-2009Q4-base:1.3 pkgsrc-2008Q4:1.3.0.14 pkgsrc-2008Q4-base:1.3 pkgsrc-2008Q3:1.3.0.12 pkgsrc-2008Q3-base:1.3 cube-native-xorg:1.3.0.10 cube-native-xorg-base:1.3 pkgsrc-2008Q2:1.3.0.8 pkgsrc-2008Q2-base:1.3 pkgsrc-2008Q1:1.3.0.6 pkgsrc-2008Q1-base:1.3 pkgsrc-2007Q4:1.3.0.4 pkgsrc-2007Q4-base:1.3 pkgsrc-2007Q3:1.3.0.2 pkgsrc-2007Q3-base:1.3 pkgsrc-2007Q2:1.2.0.4 pkgsrc-2007Q2-base:1.2 pkgsrc-2007Q1:1.2.0.2 pkgsrc-2007Q1-base:1.2; locks; strict; comment @# @; 1.3 date 2007.09.07.14.11.57; author tsutsui; state dead; branches; next 1.2; 1.2 date 2007.03.17.14.36.42; author tsutsui; state Exp; branches; next 1.1; 1.1 date 2007.03.17.13.44.20; author tsutsui; state Exp; branches; next ; desc @@ 1.3 log @Update tme to 0.6. Ok'ed by skrll@@. See fredette's annoucement for details: http://mail-index.netbsd.org/port-sparc/2007/09/07/0000.html >> The new version of tme, 0.6, fixes many bugs in the Sun 3 emulation, >> and can also emulate a SPARCstation 2. NetBSD 3.x seems to run pretty >> well on the different emulations. @ text @$NetBSD: patch-bb,v 1.2 2007/03/17 14:36:42 tsutsui Exp $ --- ic/m68k/m68k-insns-auto.sh.orig 2005-03-23 11:09:33.000000000 +0900 +++ ic/m68k/m68k-insns-auto.sh 2007-03-17 23:25:24.000000000 +0900 @@@@ -58,6 +58,96 @@@@ EOF fi +if $header; then + cat <= 1) && \\ + (TME_FIELD_EXTRACTU(TME_M68K_INSN_OPCODE,3,3) <= 6) && \\ + (TME_FIELD_EXTRACTU(TME_M68K_INSN_OPCODE,6,3) >= 1) && \\ + (TME_FIELD_EXTRACTU(TME_M68K_INSN_OPCODE,6,3) <= 6) \\ + ) && \\ + \\ +/* and there is a predec or postinc in the src, or a predec in dest */ \\ + ( \\ + (TME_FIELD_EXTRACTU(TME_M68K_INSN_OPCODE,3,3) == 3) || \\ + (TME_FIELD_EXTRACTU(TME_M68K_INSN_OPCODE,3,3) == 4) || \\ + (TME_FIELD_EXTRACTU(TME_M68K_INSN_OPCODE,6,3) == 4) \\ + ) \\ + ) + + +#define DEST_IS_PREDEC_SRC_IS_REG_BOTH_SP ( \\ + (TME_FIELD_EXTRACTU(TME_M68K_INSN_OPCODE,6,3) == 4) && \\ + (TME_FIELD_EXTRACTU(TME_M68K_INSN_OPCODE,3,3) == 1) && \\ + (TME_FIELD_EXTRACTU(TME_M68K_INSN_OPCODE,0,3) == 7) && \\ + (TME_FIELD_EXTRACTU(TME_M68K_INSN_OPCODE,9,3) == 7) \\ + ) + +/* following modes test ok */ +#define MODE35_MODE24_OR_MODE54 ( \\ + \\ +/* src/dest mode 3,5 : this is move.l (a5)+,(028,a5) */ \\ + ( \\ + (TME_FIELD_EXTRACTU(TME_M68K_INSN_OPCODE,3,3) == 3) && \\ + (TME_FIELD_EXTRACTU(TME_M68K_INSN_OPCODE,6,3) == 5) \\ + ) || \\ + \\ +/* or src/dest mode 2,4 : this is move.l (a5),-(a5) */ \\ + ( \\ + (TME_FIELD_EXTRACTU(TME_M68K_INSN_OPCODE,3,3) == 2) && \\ + (TME_FIELD_EXTRACTU(TME_M68K_INSN_OPCODE,6,3) == 4) \\ + ) || \\ + \\ +/* or src/dest mode 5,4 : this is move.l (028,a5),-(a5) */ \\ + ( \\ + (TME_FIELD_EXTRACTU(TME_M68K_INSN_OPCODE,3,3) == 5) && \\ + (TME_FIELD_EXTRACTU(TME_M68K_INSN_OPCODE,6,3) == 4) \\ + ) \\ + ) + + +#define PRINT_WEIRD_SRC_DST_REG_MODE(msg) \\ + printf("%s\nsrc reg: %x src mode: %x dest reg: %x dest mode %x at pc:%x\n", \\ + msg, \\ + TME_FIELD_EXTRACTU(TME_M68K_INSN_OPCODE,0,3), \\ + TME_FIELD_EXTRACTU(TME_M68K_INSN_OPCODE,3,3), \\ + TME_FIELD_EXTRACTU(TME_M68K_INSN_OPCODE,9,3), \\ + TME_FIELD_EXTRACTU(TME_M68K_INSN_OPCODE,6,3), \\ + ic->tme_m68k_ireg_pc) + + +#define HITRETURN(msg) do { \\ + printf("%s, pc:0x%08x, insn:0x%08x: please", \\ + msg, ic->tme_m68k_ireg_pc, TME_M68K_INSN_OPCODE); \\ + printf(" analyze M68K instruction.\n"); \\ + printf(" generate test case.\n"); \\ + printf(" if TME emulation is incorrect, correct problem.\n"); \\ + printf(" modify source to avoid this message in the future.\n"); \\ + printf("press any to continue:"); \\ + (void)getchar(); \\ + printf("continuing\n"); \\ +} while (0) + +EOF +else + cat < + +EOF +fi + # permute for the three different operand sizes we need to handle: for size in 8 16 32; do @@@@ -162,16 +252,16 @@@@ echo "" echo " if (!TME_M68K_SEQUENCE_RESTARTING) {" echo " ic->_tme_m68k_ea_function_code = function_code;" - echo " ic->_tme_m68k_ea_address = ic->tme_m68k_ireg_uint32(TME_M68K_IREG_A0 + ireg_dst);" - echo " ic->tme_m68k_ireg_uint32(TME_M68K_IREG_A0 + ireg_dst) += ireg_dst_adjust;" - echo " }" - echo " tme_m68k_read_memx${size}(ic);" - echo " if (!TME_M68K_SEQUENCE_RESTARTING) {" - echo " ic->_tme_m68k_ea_function_code = function_code;" echo " ic->_tme_m68k_ea_address = ic->tme_m68k_ireg_uint32(TME_M68K_IREG_A0 + ireg_src);" echo " ic->tme_m68k_ireg_uint32(TME_M68K_IREG_A0 + ireg_src) += ireg_src_adjust;" echo " }" echo " tme_m68k_read_mem${size}(ic, TME_M68K_IREG_MEMY${size});" + echo " if (!TME_M68K_SEQUENCE_RESTARTING) {" + echo " ic->_tme_m68k_ea_function_code = function_code;" + echo " ic->_tme_m68k_ea_address = ic->tme_m68k_ireg_uint32(TME_M68K_IREG_A0 + ireg_dst);" + echo " ic->tme_m68k_ireg_uint32(TME_M68K_IREG_A0 + ireg_dst) += ireg_dst_adjust;" + echo " }" + echo " tme_m68k_read_memx${size}(ic);" echo " ${dst} = ic->tme_m68k_ireg_memx${size};" echo " ${src} = ic->tme_m68k_ireg_memy${size};" ;; @@@@ -181,6 +271,12 @@@@ addx|subx) echo " tme_uint16_t memory;" echo "" + # sanity checks for addx/subx + echo " if ((ireg_src == ireg_dst) &&" + echo " (TME_FIELD_EXTRACTU(TME_M68K_INSN_OPCODE,3,1) == 1)) {" + echo " HITRETURN(\"weird ${name}${size}\");" + echo " }" + echo "" echo " memory = (TME_M68K_INSN_OPCODE & TME_BIT(3));" echo " if (memory) {" echo " TME_M68K_INSN_CANFAULT;" @@@@ -239,6 +335,35 @@@@ fi echo ";" + # check "moveX sp,-(sp)" and adjust res + if test ${name} = move; then + echo "" + echo " if (PREDEC_POSTINC_CONCERN) {" + echo " if (DEST_IS_PREDEC_SRC_IS_REG_BOTH_SP) {" + if test ${size} = 8; then + echo " printf(\"ERROR: ${name}${size}: how can addr/addr be 8 bits? at pc:%x\\n\"," + echo " ic->tme_m68k_ireg_pc);" + else + echo "#if 0" + echo " printf(\"${name}${size}: chg predec dest res from:%x to %x for register %d at pc %x\\n\"," + echo " res, res + (${size} / 8), TME_FIELD_EXTRACTU(TME_M68K_INSN_OPCODE,0,3), ic->tme_m68k_ireg_pc);" + echo "#endif" + echo " res = res + (${size} / 8);" + fi + echo " } else if (!(MODE35_MODE24_OR_MODE54)) {" + echo " PRINT_WEIRD_SRC_DST_REG_MODE(\"WEIRD: ${name}${size}\");" + echo " }" + echo " }" + fi + + # sanity check for cmpa16 + if test ${name} = cmpa; then + echo "" + echo " if PREDEC_POSTINC_CONCERN {" + echo " PRINT_WEIRD_SRC_DST_REG_MODE(\"weird ${name}${size}\");" + echo " }" + fi + # store the result: if $store_res; then echo "" @@@@ -362,6 +487,10 @@@@ adda) op='+' ; src="_op0" ; dst="_op1" ;; movea) op='' ; src="_op1" ; dst="_op0" ;; esac + echo " if (PREDEC_POSTINC_CONCERN) {" + echo " PRINT_WEIRD_SRC_DST_REG_MODE(\"weird ${name}${size}\");" + echo " }" + echo "" echo " *((tme_int32_t *) ${dst}) ${op}= *((tme_int${size}_t *) ${src});" echo " TME_M68K_INSN_OK;" echo "}" @@@@ -801,6 +930,10 @@@@ echo " tme_uint16_t specopy = TME_M68K_INSN_OP0(tme_uint16_t);" echo " tme_uint32_t addrx;" echo " tme_uint32_t addry;" + fi + echo "" + echo " TME_M68K_INSN_CANFAULT;" + if test $name = cas2_; then echo "" echo " /* get the function code and addresses we'll be dealing with: */" echo " ic->_tme_m68k_ea_function_code = TME_M68K_FUNCTION_CODE_DATA(ic);" @ 1.2 log @Tweak a diff not to include RCS Id strings in the original source. @ text @d1 1 a1 1 $NetBSD$ @ 1.1 log @Apply various fixes. Most of them are contributed by Arthur Townsend (see his ILVSUN3 page http://www.ilvsun3.com/ for more details), and some others are from skrll and me. patch-ab: (from skrll) fix an invalid pointer cast for -fstrict-aliasing patch-a[cijklmn]: PR pkg/34113 (by me) - specify -fno-strict-aliasing in Makefiles (for workaround) - add several casts to appease -Wpointer-sign - remove a static decl from a global function - add a cast and remove unused variable patch-ap: (from Arthur, tweaked by me) disable "cannot generate keysym" warnings on tmesh startup patch-aq: PR pkg/33969 (from Arthur) TME sun3 emulator incorrectly emulates cmp2 and chk2 M68K instructions patch-ar: PR pkg/34538 (from Arthur) TME sun3 emulator incorrectly calculates EA with immediate mode instructions with PC indirect 16-bit displacement addressing patch-aw: PR pkg/35010 (from Arthur) sun3 emulator asserts when using stdin/stdout for emulated serial console patch-ax: PR pkg/35009 (from Arthur) TME sun3 emulator asserts when running two emulators with ethernet patch-az: PR pkg/35305 (from Arthur, with some minor tweaks by me) TME sun3 emulator incorrectly emulates ethernet obie & i825x6 hardware patch-ba: PR pkg/35309 (from Arthur) TME sun3 emulator, running without a window manager, overwrites tmesh prompt patch-bb: PR pkg/34690 (from Arthur, modified by me) TME sun3 emulator incorrectly performs: movel sp,-(sp) (also modify m68k-insns-auto.sh to mark cas instructions CANFAULT) patch-bc: PR pkg/34571 (from Arthur, modified by me) TME sun3 emulator doesn't consider floating point infinities to be equal patch-bd: (by me) - avoid invalid 32 bit shifts in fb-xlat-auto.sh, which may cause broken screen fonts when tme is compiled with gcc4 patch-be: (by me) fix decoding cas instructions Makefile: (by me) - add some CONFIGURE_ARGS to avoid invalid shifts more than (or equal to) variable sizes, which could be problematic on gcc4 - bump PKGREVISION @ text @d4 4 a7 3 +++ ic/m68k/m68k-insns-auto.sh 2007-03-15 01:11:22.000000000 +0900 @@@@ -51,8 +51,92 @@@@ _TME_RCSID("\$Id: m68k-insns-auto.sh,v 1.23 2005/03/10 13:26:23 fredette Exp $"); a8 2 EOF -if $header; then :; else d10 1 a10 1 cat <