2010-01-07 Laszlo Gombos <laszlo.1.gombos@nokia.com>
Reviewed by Gavin Barraclough.
[Symbian] Port ARM traditional JIT Trampolines to RVCT
https://bugs.webkit.org/show_bug.cgi?id=30552
Take the GCC implementation and mechanically convert
it to RVCT syntax.
Use 'bx rX' instead of 'mov pc, rX' when it is available.
Developed in cooperation with Iain Campbell and Gabor Loki.
* JavaScriptCore.pri: Extra step to generate RVCT stubs. The
script generation intentionally executed all the time not just
for RVCT targets.
* create_rvct_stubs: Added. Perl script to expand precompiler macros
for RVCT assembler - the template is defined in JITStubs.cpp.
* jit/JITStubs.cpp:
(JSC::ctiTrampoline):
(JSC::ctiVMThrowTrampoline):
(JSC::ctiOpThrowNotCaught):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@52970 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/JavaScriptCore/create_rvct_stubs b/JavaScriptCore/create_rvct_stubs
new file mode 100644
index 0000000..0c49c4f
--- /dev/null
+++ b/JavaScriptCore/create_rvct_stubs
@@ -0,0 +1,52 @@
+#! /usr/bin/perl -w
+#
+# Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library 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
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public License
+# along with this library; see the file COPYING.LIB. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+
+use strict;
+
+my $file = $ARGV[0];
+shift;
+
+my $stub_template = "";
+my $stub = "";
+
+my $rtype = "";
+my $op = "";
+
+my $rtype_template = quotemeta("#rtype#");
+my $op_template = quotemeta("#op#");
+
+print STDERR "Creating RVCT stubs for $file \n";
+open(IN, $file) or die "No such file $file";
+
+while ( $_ = <IN> ) {
+ if ( /^RVCT\((.*)\)/ ) {
+ $stub_template .= $1 . "\n";
+ }
+ if ( /^DEFINE_STUB_FUNCTION\((.*), (.*)\)/ ) {
+ $stub = $stub_template;
+ $rtype = quotemeta($1);
+ $op = quotemeta($2);
+ $stub =~ s/$rtype_template/$rtype/g;
+ $stub =~ s/$op_template/$op/g;
+ $stub =~ s/\\\*/\*/g;
+ print $stub;
+ }
+}
+
+close(IN);