huge list matching -- different behaviour on x86_32 and x86_64

Bjorn Gustavsson <>
Mon Jun 19 16:14:42 CEST 2006


Igor Goryachev <> writes:

> Hello.
> 
> I have experienced a different behaviour and possibly a weird result
> while playing with matching a huge lists on x86_32 and x86_64
> machines. Version r10b10 was used in both cases.
> 

The problem was in the loader. The following patch resolves the problem
at least in R11B-0. (It will probably work if applied to R10B-10 too,
but I have not tested that.)

*** erts/emulator/utils/beam_makeops@@/main/release/13	Wed May  3 10:01:25 2006
--- erts/emulator/utils/beam_makeops	Mon Jun 19 15:56:33 2006
***************
*** 481,487 ****
      print "\n";
      print "#ifdef ARCH_64\n";
      print "#  define BEAM_LOOSE_MASK 0x1FFFUL\n";
!     print "#  define BEAM_TIGHT_MASK 0xFFCUL\n";
      print "#  define BEAM_LOOSE_SHIFT 16\n";
      print "#  define BEAM_TIGHT_SHIFT 16\n";
      print "#else\n";
--- 481,487 ----
      print "\n";
      print "#ifdef ARCH_64\n";
      print "#  define BEAM_LOOSE_MASK 0x1FFFUL\n";
!     print "#  define BEAM_TIGHT_MASK 0x1FF8UL\n";
      print "#  define BEAM_LOOSE_SHIFT 16\n";
      print "#  define BEAM_TIGHT_SHIFT 16\n";
      print "#else\n";

/Bjorn
-- 
Björn Gustavsson, Erlang/OTP, Ericsson AB



More information about the erlang-questions mailing list