Author: piumarta Date: 2009-09-17 08:56:33 -0700 (Thu, 17 Sep 2009) New Revision: 2139 Added: trunk/platforms/unix/cmake/gnuify trunk/platforms/unix/cmake/gnuify.awk Modified: trunk/platforms/unix/ChangeLog trunk/platforms/unix/cmake/configure trunk/platforms/unix/vm/build.cmake trunk/platforms/unix/vm/config.cmake Log: try to gnuify interp.c if compiling with gcc Modified: trunk/platforms/unix/ChangeLog =================================================================== --- trunk/platforms/unix/ChangeLog 2009-09-17 01:56:43 UTC (rev 2138) +++ trunk/platforms/unix/ChangeLog 2009-09-17 15:56:33 UTC (rev 2139) @@ -1,3 +1,19 @@ +2009-09-17 <[hidden email]> + + * vm/config.cmake: Configure interp as "gnu-interp" if compiler is + GCC, otherwise "interp". + + * vm/build.cmake: squeakvm depends on bld/${interp}.c. Implicitly + build bld/gnu-interp.c from src/vm/interp.c using gnuify. + Implicitly build bld/interp.c by copying src/vm/interp.c. + + * cmake/gnuify: Try gnuify.awk with gawk then awk then cp. + + * cmake/gnuify.awk: Copied from old config/gnuify. + + * cmake/configure (svnversion): Quote unix/.svn to permit spaces + in pathnames. + 2009-09-16 Ian Piumarta <com -dot- gmail -at- piumarta (backwards)> * doc/RELEASE_NOTES_3.11.3.2135: Release 3.11.3.2135. Modified: trunk/platforms/unix/cmake/configure =================================================================== --- trunk/platforms/unix/cmake/configure 2009-09-17 01:56:43 UTC (rev 2138) +++ trunk/platforms/unix/cmake/configure 2009-09-17 15:56:33 UTC (rev 2139) @@ -1,6 +1,6 @@ #!/bin/sh -# Last edited: 2009-09-16 14:37:45 by piumarta on ubuntu.piumarta.com +# Last edited: 2009-09-16 14:48:48 by piumarta on ubuntu.piumarta.com RELEASE_TAG="" @@ -89,7 +89,7 @@ vmmversion="`tr '\015 ' '\012\012' < \"${interp_h}\" | sed '1,/VMMaker/d;q'`" -if test -d ${unix}/.svn; then +if test -d "${unix}/.svn"; then svnversion=`svn info "${unix}/ChangeLog" | fgrep Revision: | awk '{print $2}'` echo "${svnversion}" > "${unix}/svnversion" else Added: trunk/platforms/unix/cmake/gnuify =================================================================== --- trunk/platforms/unix/cmake/gnuify (rev 0) +++ trunk/platforms/unix/cmake/gnuify 2009-09-17 15:56:33 UTC (rev 2139) @@ -0,0 +1,18 @@ +#!/bin/sh +# +# Last edited: 2009-09-17 08:47:30 by piumarta on ubuntu.piumarta.com + +gfy="$1" +src="$2" +dst="$3" +log="${dst}.log" + +rm -f "${dst}" "${log}" + +exec >> "${log}" 2>&1 + +set -x + +try () { "$1" -f "${gfy}" "${src}" > "${dst}" 2>> "${log}"; } + +try gawk || try awk || cp -p "${src}" "${dst}" Property changes on: trunk/platforms/unix/cmake/gnuify ___________________________________________________________________ Added: svn:executable + * Added: trunk/platforms/unix/cmake/gnuify.awk =================================================================== --- trunk/platforms/unix/cmake/gnuify.awk (rev 0) +++ trunk/platforms/unix/cmake/gnuify.awk 2009-09-17 15:56:33 UTC (rev 2139) @@ -0,0 +1,183 @@ +#!/usr/bin/awk -f +# +# Rewrite the interpreter source in $1 to use GNU C extensions, writing the +# modified file to stdout. +# +# Author: [hidden email] +# +# Last edited: 2009-09-17 08:34:23 by piumarta on ubuntu.piumarta.com + +# Copyright (C) 1996-2004 by Ian Piumarta and other authors/contributors +# listed elsewhere in this file. +# All rights reserved. +# +# This file is part of Unix Squeak. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +BEGIN { + print "/* This file has been post-processed for GNU C */\n\n"; +# print "copying first section of file" > "/dev/stderr"; + stage= 0; +} + +/#include "sq.h"/ { + print "#include \"sqGnu.h\"\n"; + next; +} + +# An inlining comment means the interpreter was not inlined + +/inline\: true/ { +# print NR, $0 > "/dev/stderr"; +# print "" > "/dev/stderr"; +# print "*** interpreter was not inlined: bailing out! ***" > "/dev/stderr"; +# print "" > "/dev/stderr"; + stage= -1; +} + + +(stage == 0) && /^int interpret\(void\) \{/ { +# print "interpret: adding static register assignments" > "/dev/stderr"; + stage= 1; + print; + next; +} + +(stage == 0) && /^sqInt interpret\(void\) \{/ { +# print "interpret: adding static register assignments" > "/dev/stderr"; + stage= 1; + print; + next; +} + +(stage == 1) && /^ char\* localIP;/ { + print " register char* localIP IP_REG;"; + next; +} + +(stage == 1) && /^register struct foo \* foo = &fum;/ { + print " register struct foo * foo GP_REG= &fum;"; + next; +} + +(stage == 1) && /^ char\* localSP;/ { + print " register char* localSP SP_REG;"; + next; +} + +(stage == 1) && /^ int currentBytecode;/ { + print " register int currentBytecode CB_REG;"; + next; +} + +(stage == 1) && /^ sqInt currentBytecode;/ { + print " register int currentBytecode CB_REG;"; + next; +} + +(stage == 1) && /^$/ { +# print "interpret: adding bytecode dispatch table" > "/dev/stderr"; + print " JUMP_TABLE;\n"; +# print "interpret: rewriting case labels and outer breaks" > "/dev/stderr"; + stage= 2; + FS=" "; +# FS="[ :]+"; + next; +} + +(stage == 2) && /^ case / { + print " CASE(" (($NF) + 0) ")"; +# print " CASE(" $3 ")"; + next; +} + +(stage == 2) && /^ break;/ { + print " BREAK;"; + next; +} + +(stage == 2) && /^\}/ { + stage= -1; + print; + next; +} + +(stage == 3) && /^int primitiveResponse\(/ { + print; +# print "primitiveResponse: adding primitive dispatch table" > "/dev/stderr"; + print " PRIM_TABLE;\n"; +# print "primitiveResponse: rewriting case labels" > "/dev/stderr"; + stage= 4; + FS=" "; +# FS="[ :]+"; + next; +} + +(stage == 3) && /^sqInt primitiveResponse\(/ { + print; +# print "primitiveResponse: adding primitive dispatch table" > "/dev/stderr"; + print " PRIM_TABLE;\n"; +# print "primitiveResponse: rewriting case labels" > "/dev/stderr"; + stage= 4; + FS=" "; +# FS="[ :]+"; + next; +} + + +(stage == 4) && /^ switch \(primitiveIndex\) \{/ { +# print "primitiveResponse: adding primitive dispatch" > "/dev/stderr"; + print " PRIM_DISPATCH;"; + print; + next; +} + +(stage == 4) && /^ switch \(foo->primitiveIndex\) \{/ { +# print "primitiveResponse: adding primitive dispatch" > "/dev/stderr"; + print " PRIM_DISPATCH;"; + print; + next; +} + +(stage == 4) && /^ case / { + print " CASE(" (($NF) + 0) ")"; +# print " CASE(" $3 ")"; + next; +} + +(stage == 4) && /^\}/ { +# print "copying last section of file" > "/dev/stderr"; + stage= -1; + FS=" "; + print; + next; +} + +# default +{ + print; + next; +} + +END { + if (stage != -1) { + print "#error GNUIFICATION FAILED (", stage, ")" + } +} Modified: trunk/platforms/unix/vm/build.cmake =================================================================== --- trunk/platforms/unix/vm/build.cmake 2009-09-17 01:56:43 UTC (rev 2138) +++ trunk/platforms/unix/vm/build.cmake 2009-09-17 15:56:33 UTC (rev 2139) @@ -1,7 +1,7 @@ LINK_DIRECTORIES (${vm_link_directories}) ADD_EXECUTABLE (squeakvm - ${src}/vm/interp.c + ${bld}/${interp}.c ${unix}/vm/aio.c ${unix}/vm/debug.c ${unix}/vm/osExports.c @@ -20,6 +20,16 @@ COMMAND ${config}/verstamp ${bld}/version.c ${CMAKE_C_COMPILER} ) +ADD_CUSTOM_COMMAND ( + OUTPUT ${bld}/interp.c + COMMAND ${CMAKE_COMMAND} -E copy ${src}/vm/interp.c ${bld}/interp.c} +) + +ADD_CUSTOM_COMMAND ( + OUTPUT ${bld}/gnu-interp.c + COMMAND ${config}/gnuify ${config}/gnuify.awk ${src}/vm/interp.c ${bld}/gnu-interp.c +) + INCLUDE_DIRECTORIES ( ${bld} ${src}/vm Modified: trunk/platforms/unix/vm/config.cmake =================================================================== --- trunk/platforms/unix/vm/config.cmake 2009-09-17 01:56:43 UTC (rev 2138) +++ trunk/platforms/unix/vm/config.cmake 2009-09-17 15:56:33 UTC (rev 2139) @@ -16,7 +16,12 @@ CONFIG_DEFINE (DARWIN) -SET (interp interp) +IF (CMAKE_COMPILER_IS_GNUCC) + SET (interp gnu-interp) +ELSE () + SET (interp interp) + MESSAGE ("!! Cannot optimise interpreter performance for GCC") +ENDIF (CMAKE_COMPILER_IS_GNUCC) INCLUDE (TestBigEndian) INCLUDE (CheckIncludeFile) |
Free forum by Nabble | Edit this page |