Skip to content

Commit

Permalink
Merge branch 'bg/compiler-remove-r11-support' into dev
Browse files Browse the repository at this point in the history
* bg/compiler-remove-r11-support:
  compiler: Don't support the no_binaries option
  erts: Don't support the put_string/3 instruction
  compiler: Don't support the no_constant_pool option
  compiler: Don't support the r11 option
  test_server: Don't support communication with R11 nodes
  binary_SUITE: Don't test bit-level binary roundtrips with R11 nodes
  erts: Test compatibility of funs with R12 instead of R11

OTP-8531 bg/compiler-remove-r11-support
  • Loading branch information
Erlang/OTP committed Mar 25, 2010
2 parents 01d605f + d179c15 commit 7ffd073
Show file tree
Hide file tree
Showing 23 changed files with 113 additions and 354 deletions.
1 change: 0 additions & 1 deletion .gitignore
Expand Up @@ -119,7 +119,6 @@ a.out.dSYM/
/lib/compiler/src/beam_opcodes.hrl
/lib/compiler/src/core_parse.erl

/lib/compiler/test/*_r11_SUITE.erl
/lib/compiler/test/*_no_opt_SUITE.erl
/lib/compiler/test/*_post_opt_SUITE.erl

Expand Down
14 changes: 0 additions & 14 deletions erts/emulator/beam/beam_emu.c
Expand Up @@ -1414,20 +1414,6 @@ void process_main(void)
NextPF(2, next);
}

OpCase(put_string_IId):
{
unsigned char* s;
int len;
Eterm result;

len = Arg(0); /* Length. */
result = NIL;
for (s = (unsigned char *) Arg(1); len > 0; s--, len--) {
PutList(make_small(*s), result, result, StoreSimpleDest);
}
StoreBifResult(2, result);
}

/*
* Send is almost a standard call-BIF with two arguments, except for:
* 1) It cannot be traced.
Expand Down
46 changes: 0 additions & 46 deletions erts/emulator/beam/beam_load.c
Expand Up @@ -277,7 +277,6 @@ typedef struct {
BeamInstr* code; /* Loaded code. */
int ci; /* Current index into loaded code. */
Label* labels;
BeamInstr put_strings; /* Linked list of put_string instructions. */
BeamInstr new_bs_put_strings; /* Linked list of i_new_bs_put_string instructions. */
StringPatch* string_patches; /* Linked list of position into string table to patch. */
BeamInstr catches; /* Linked list of catch_yf instructions. */
Expand Down Expand Up @@ -1388,7 +1387,6 @@ read_code_header(LoaderState* stp)
stp->code[MI_COMPILE_SIZE_ON_HEAP] = 0;
stp->code[MI_NUM_BREAKPOINTS] = 0;

stp->put_strings = 0;
stp->new_bs_put_strings = 0;
stp->catches = 0;
return 1;
Expand Down Expand Up @@ -2130,34 +2128,6 @@ load_code(LoaderState* stp)
/* Remember offset for the on_load function. */
stp->on_load = ci;
break;
case op_put_string_IId:
{
/*
* At entry:
*
* code[ci-4] &&lb_put_string_IId
* code[ci-3] length of string
* code[ci-2] offset into string table
* code[ci-1] destination register
*
* Since we don't know the address of the string table yet,
* just check the offset and length for validity, and use
* the instruction field as a link field to link all put_string
* instructions into a single linked list. At exit:
*
* code[ci-4] pointer to next put_string instruction (or 0
* if this is the last)
*/
Uint offset = code[ci-2];
Uint len = code[ci-3];
unsigned strtab_size = stp->chunks[STR_CHUNK].size;
if (offset > strtab_size || offset + len > strtab_size) {
LoadError2(stp, "invalid string reference %d, size %d", offset, len);
}
code[ci-4] = stp->put_strings;
stp->put_strings = ci - 4;
}
break;
case op_bs_put_string_II:
{
/*
Expand Down Expand Up @@ -3593,22 +3563,6 @@ freeze_code(LoaderState* stp)
}
CHKBLK(ERTS_ALC_T_CODE,code);


/*
* Go through all put_strings instructions, restore the pointer to
* the instruction and convert string offsets to pointers (to the
* LAST character).
*/

index = stp->put_strings;
while (index != 0) {
Uint next = code[index];
code[index] = BeamOpCode(op_put_string_IId);
code[index+2] = (BeamInstr) (str_table + code[index+2] + code[index+1] - 1);
index = next;
}
CHKBLK(ERTS_ALC_T_CODE,code);

/*
* Go through all i_new_bs_put_strings instructions, restore the pointer to
* the instruction and convert string offsets to pointers (to the
Expand Down
17 changes: 5 additions & 12 deletions erts/emulator/beam/ops.tab
@@ -1,19 +1,19 @@
#
# %CopyrightBegin%
#
# Copyright Ericsson AB 1997-2009. All Rights Reserved.
#
#
# Copyright Ericsson AB 1997-2010. All Rights Reserved.
#
# The contents of this file are subject to the Erlang Public License,
# Version 1.1, (the "License"); you may not use this file except in
# compliance with the License. You should have received a copy of the
# Erlang Public License along with this software. If not, it can be
# retrieved online at http://www.erlang.org/.
#
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
# the License for the specific language governing rights and limitations
# under the License.
#
#
# %CopyrightEnd%
#

Expand Down Expand Up @@ -66,7 +66,6 @@ func_info M=a a==am_module_info A=u==1 | label L | move n r => too_old_compiler

bif1 Fail u$func:erlang:is_constant/1 Src Dst => too_old_compiler


#
# All the other instructions.
#
Expand Down Expand Up @@ -115,12 +114,6 @@ init Y1 | init Y2 => init2 Y1 Y2
%macro: init2 Init2 -pack
%macro: init3 Init3 -pack

#
# Warning: The put_string instruction is specially treated in the loader.
# Don't change the instruction format unless you change the loader too.
#
put_string I I d

# Selecting values

select_val S=q Fail=f Size=u Rest=* => const_select_val(S, Fail, Size, Rest)
Expand Down
12 changes: 6 additions & 6 deletions erts/emulator/test/Makefile
@@ -1,19 +1,19 @@
#
# %CopyrightBegin%
#
# Copyright Ericsson AB 1997-2009. All Rights Reserved.
#
#
# Copyright Ericsson AB 1997-2010. All Rights Reserved.
#
# The contents of this file are subject to the Erlang Public License,
# Version 1.1, (the "License"); you may not use this file except in
# compliance with the License. You should have received a copy of the
# Erlang Public License along with this software. If not, it can be
# retrieved online at http://www.erlang.org/.
#
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
# the License for the specific language governing rights and limitations
# under the License.
#
#
# %CopyrightEnd%
#

Expand Down Expand Up @@ -61,7 +61,7 @@ MODULES= \
exception_SUITE \
float_SUITE \
fun_SUITE \
fun_r11_SUITE \
fun_r12_SUITE \
gc_SUITE \
guard_SUITE \
hash_SUITE \
Expand Down
32 changes: 1 addition & 31 deletions erts/emulator/test/binary_SUITE.erl
Expand Up @@ -55,7 +55,6 @@
otp_5484/1,otp_5933/1,
ordering/1,unaligned_order/1,gc_test/1,
bit_sized_binary_sizes/1,
bitlevel_roundtrip/1,
otp_6817/1,deep/1,obsolete_funs/1,robustness/1,otp_8117/1,
otp_8180/1]).

Expand All @@ -70,7 +69,7 @@ all(suite) ->
bad_binary_to_term_2,safe_binary_to_term2,
bad_binary_to_term, bad_terms, t_hash, bad_size, bad_term_to_binary,
more_bad_terms, otp_5484, otp_5933, ordering, unaligned_order,
gc_test, bit_sized_binary_sizes, bitlevel_roundtrip, otp_6817, otp_8117,
gc_test, bit_sized_binary_sizes, otp_6817, otp_8117,
deep,obsolete_funs,robustness,otp_8180].

init_per_testcase(Func, Config) when is_atom(Func), is_list(Config) ->
Expand Down Expand Up @@ -1150,35 +1149,6 @@ bsbs_1(A) ->
Bin = binary_to_term(<<131,$M,5:32,A,0,0,0,0,0>>),
BinSize = bit_size(Bin).

bitlevel_roundtrip(Config) when is_list(Config) ->
case ?t:is_release_available("r11b") of
true -> bitlevel_roundtrip_1();
false -> {skip,"No R11B found"}
end.

bitlevel_roundtrip_1() ->
Name = bitlevelroundtrip,
?line N = list_to_atom(atom_to_list(Name) ++ "@" ++ hostname()),
?line ?t:start_node(Name, slave, [{erl,[{release,"r11b"}]}]),

?line {<<128>>,1} = roundtrip(N, <<1:1>>),
?line {<<64>>,2} = roundtrip(N, <<1:2>>),
?line {<<16#E0>>,3} = roundtrip(N, <<7:3>>),
?line {<<16#70>>,4} = roundtrip(N, <<7:4>>),
?line {<<16#10>>,5} = roundtrip(N, <<2:5>>),
?line {<<16#8>>,6} = roundtrip(N, <<2:6>>),
?line {<<16#2>>,7} = roundtrip(N, <<1:7>>),
?line {<<8,128>>,1} = roundtrip(N, <<8,1:1>>),
?line {<<42,248>>,5} = roundtrip(N, <<42,31:5>>),

?line ?t:stop_node(N),
ok.

roundtrip(Node, Term) ->
{badrpc,{'EXIT',Res}} = rpc:call(Node, erlang, exit, [Term]),
io:format("<<~p bits>> => ~w", [bit_size(Term),Res]),
Res.

deep(Config) when is_list(Config) ->
?line deep_roundtrip(lists:foldl(fun(E, A) ->
[E,A]
Expand Down
@@ -1,24 +1,23 @@
%%
%% %CopyrightBegin%
%%
%% Copyright Ericsson AB 2007-2009. All Rights Reserved.
%%
%%
%% Copyright Ericsson AB 2007-2010. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
%% compliance with the License. You should have received a copy of the
%% Erlang Public License along with this software. If not, it can be
%% retrieved online at http://www.erlang.org/.
%%
%%
%% Software distributed under the License is distributed on an "AS IS"
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
%% the License for the specific language governing rights and limitations
%% under the License.
%%
%%
%% %CopyrightEnd%
%%

-module(fun_r11_SUITE).
-compile(r11).
-module(fun_r12_SUITE).

-export([all/1,init_per_testcase/2,fin_per_testcase/2,dist_old_release/1]).

Expand All @@ -37,36 +36,36 @@ fin_per_testcase(_Case, Config) ->
ok.

dist_old_release(Config) when is_list(Config) ->
case ?t:is_release_available("r11b") of
case ?t:is_release_available("r12b") of
true -> do_dist_old(Config);
false -> {skip,"No R11B found"}
false -> {skip,"No R12B found"}
end.

do_dist_old(Config) when is_list(Config) ->
?line Pa = filename:dirname(code:which(?MODULE)),
Name = fun_dist_r11,
Name = fun_dist_r12,
?line {ok,Node} = ?t:start_node(Name, peer,
[{args,"-pa "++Pa},
{erl,[{release,"r11b"}]}]),
{erl,[{release,"r12b"}]}]),

?line Pid = spawn_link(Node,
fun() ->
receive
Fun when is_function(Fun) ->
R11BFun = fun(H) -> cons(H, [b,c]) end,
Fun(Fun, R11BFun)
R12BFun = fun(H) -> cons(H, [b,c]) end,
Fun(Fun, R12BFun)
end
end),
Self = self(),
Fun = fun(F, R11BFun) ->
Fun = fun(F, R12BFun) ->
{pid,Self} = erlang:fun_info(F, pid),
{module,?MODULE} = erlang:fun_info(F, module),
Self ! {ok,F,R11BFun}
Self ! {ok,F,R12BFun}
end,
?line Pid ! Fun,
?line receive
{ok,Fun,R11BFun} ->
?line [a,b,c] = R11BFun(a);
{ok,Fun,R12BFun} ->
?line [a,b,c] = R12BFun(a);
Other ->
?line ?t:fail({bad_message,Other})
end,
Expand Down
12 changes: 5 additions & 7 deletions lib/compiler/src/beam_block.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
%%
%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
%%
%%
%% Copyright Ericsson AB 1999-2010. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
%% compliance with the License. You should have received a copy of the
%% Erlang Public License along with this software. If not, it can be
%% retrieved online at http://www.erlang.org/.
%%
%%
%% Software distributed under the License is distributed on an "AS IS"
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
%% the License for the specific language governing rights and limitations
%% under the License.
%%
%%
%% %CopyrightEnd%
%%
%% Purpose : Partitions assembly instructions into basic blocks and
Expand Down Expand Up @@ -140,7 +140,6 @@ collect({move,S,D}) -> {set,[D],[S],move};
collect({put_list,S1,S2,D}) -> {set,[D],[S1,S2],put_list};
collect({put_tuple,A,D}) -> {set,[D],[],{put_tuple,A}};
collect({put,S}) -> {set,[],[S],put};
collect({put_string,L,S,D}) -> {set,[D],[],{put_string,L,S}};
collect({get_tuple_element,S,I,D}) -> {set,[D],[S],{get_tuple_element,I}};
collect({set_tuple_element,S,D,I}) -> {set,[],[S,D],{set_tuple_element,I}};
collect({get_list,S,D1,D2}) -> {set,[D1,D2],[S],get_list};
Expand Down Expand Up @@ -204,7 +203,6 @@ alloc_may_pass({set,_,_,{set_tuple_element,_}}) -> false;
alloc_may_pass({set,_,_,put_list}) -> false;
alloc_may_pass({set,_,_,{put_tuple,_}}) -> false;
alloc_may_pass({set,_,_,put}) -> false;
alloc_may_pass({set,_,_,{put_string,_,_}}) -> false;
alloc_may_pass({set,_,_,_}) -> true.

combine_alloc({_,Ns,Nh1,Init}, {_,nostack,Nh2,[]}) ->
Expand Down
11 changes: 5 additions & 6 deletions lib/compiler/src/beam_flatten.erl
@@ -1,19 +1,19 @@
%%
%% %CopyrightBegin%
%%
%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
%%
%%
%% Copyright Ericsson AB 1999-2010. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
%% compliance with the License. You should have received a copy of the
%% Erlang Public License along with this software. If not, it can be
%% retrieved online at http://www.erlang.org/.
%%
%%
%% Software distributed under the License is distributed on an "AS IS"
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
%% the License for the specific language governing rights and limitations
%% under the License.
%%
%%
%% %CopyrightEnd%
%%
%% Purpose : Converts intermediate assembly code to final format.
Expand Down Expand Up @@ -57,7 +57,6 @@ norm({set,[D],[S],fconv}) -> {fconv,S,D};
norm({set,[D],[S1,S2],put_list}) -> {put_list,S1,S2,D};
norm({set,[D],[],{put_tuple,A}}) -> {put_tuple,A,D};
norm({set,[],[S],put}) -> {put,S};
norm({set,[D],[],{put_string,L,S}}) -> {put_string,L,S,D};
norm({set,[D],[S],{get_tuple_element,I}}) -> {get_tuple_element,S,I,D};
norm({set,[],[S,D],{set_tuple_element,I}}) -> {set_tuple_element,S,D,I};
norm({set,[D1,D2],[S],get_list}) -> {get_list,S,D1,D2};
Expand Down

0 comments on commit 7ffd073

Please sign in to comment.