aboutsummaryrefslogtreecommitdiffstats
path: root/erts
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2010-10-18 16:39:59 +0200
committerBjörn Gustavsson <[email protected]>2011-01-17 15:23:38 +0100
commite31af112f63b11622d6a3a49cb444d5613af2f1f (patch)
tree99972deacdd447774d5892bccc06389843885f48 /erts
parentec325cc785916c6a4991fe2e03747a97b7e1ae75 (diff)
downloadotp-e31af112f63b11622d6a3a49cb444d5613af2f1f.tar.gz
otp-e31af112f63b11622d6a3a49cb444d5613af2f1f.tar.bz2
otp-e31af112f63b11622d6a3a49cb444d5613af2f1f.zip
Pass the external word size to the beam_makeops script
Giving the beam_makeops script access to the external word size (=the size of instruction words) will allow it to pack more operands into a word for the 64 bits emulator.
Diffstat (limited to 'erts')
-rw-r--r--erts/configure.in5
-rw-r--r--erts/emulator/Makefile.in4
-rwxr-xr-xerts/emulator/utils/beam_makeops2
3 files changed, 10 insertions, 1 deletions
diff --git a/erts/configure.in b/erts/configure.in
index 6e983a07b0..627f734409 100644
--- a/erts/configure.in
+++ b/erts/configure.in
@@ -580,6 +580,11 @@ AC_SUBST(WFLAGS)
AC_SUBST(CFLAG_RUNTIME_LIBRARY_PATH)
AC_CHECK_SIZEOF(void *) # Needed for ARCH and smp checks below
+if test "x$ac_cv_sizeof_void_p" = x8; then
+ AC_SUBST(EXTERNAL_WORD_SIZE, 64)
+else
+ AC_SUBST(EXTERNAL_WORD_SIZE, 32)
+fi
dnl
dnl Figure out operating system and cpu architecture
diff --git a/erts/emulator/Makefile.in b/erts/emulator/Makefile.in
index 1420fd6bfa..f04df354a8 100644
--- a/erts/emulator/Makefile.in
+++ b/erts/emulator/Makefile.in
@@ -506,7 +506,9 @@ OPCODE_TABLES += hipe/hipe_ops.tab
endif
$(TTF_DIR)/beam_opcodes.h $(TTF_DIR)/beam_opcodes.c: $(OPCODE_TABLES) utils/beam_makeops
- LANG=C $(PERL) utils/beam_makeops -outdir $(TTF_DIR) \
+ LANG=C $(PERL) utils/beam_makeops \
+ -wordsize @EXTERNAL_WORD_SIZE@ \
+ -outdir $(TTF_DIR) \
-emulator $(OPCODE_TABLES)
# bif and atom table
diff --git a/erts/emulator/utils/beam_makeops b/erts/emulator/utils/beam_makeops
index cb91517f04..aa1aba6856 100755
--- a/erts/emulator/utils/beam_makeops
+++ b/erts/emulator/utils/beam_makeops
@@ -27,6 +27,7 @@ my $outdir = "."; # Directory for output files.
my $verbose = 0;
my $hot = 1;
my $num_file_opcodes = 0;
+my $wordsize = 32;
# This is shift counts and mask for the packer.
my $WHOLE_WORD = '';
@@ -171,6 +172,7 @@ while (@ARGV && $ARGV[0] =~ /^-(.*)/) {
($target = \&emulator_output), next if /^emulator/;
($target = \&compiler_output), next if /^compiler/;
($outdir = shift), next if /^outdir/;
+ ($wordsize = shift), next if /^wordsize/;
($verbose = 1), next if /^v/;
die "$0: Bad option: -$_\n";
}