aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2012-03-30 11:54:04 +0200
committerBjörn Gustavsson <[email protected]>2015-07-03 14:28:03 +0200
commite1019cbba7a66788a068b6df1a1caf2d643ef65b (patch)
tree8b460ce8101eec734a4baf4df9fb5096ec129334
parent1f996cc46a8c935b8f4e33a4a96804f9fb852da3 (diff)
downloadotp-e1019cbba7a66788a068b6df1a1caf2d643ef65b.tar.gz
otp-e1019cbba7a66788a068b6df1a1caf2d643ef65b.tar.bz2
otp-e1019cbba7a66788a068b6df1a1caf2d643ef65b.zip
Eliminate R_REG_DEF
-rw-r--r--erts/emulator/beam/beam_debug.c22
-rw-r--r--erts/emulator/beam/beam_emu.c14
-rw-r--r--erts/emulator/beam/beam_load.c8
-rw-r--r--erts/emulator/beam/erl_term.h2
4 files changed, 4 insertions, 42 deletions
diff --git a/erts/emulator/beam/beam_debug.c b/erts/emulator/beam/beam_debug.c
index 8a35ad17c6..00d0b27178 100644
--- a/erts/emulator/beam/beam_debug.c
+++ b/erts/emulator/beam/beam_debug.c
@@ -452,21 +452,13 @@ print_op(int to, void *to_arg, int op, int size, BeamInstr* addr)
case 's': /* Any source (tagged constant or register) */
tag = beam_reg_tag(*ap);
if (tag == X_REG_DEF) {
- if (reg_index(*ap) == 0) {
- erts_print(to, to_arg, "x[0]");
- } else {
- erts_print(to, to_arg, "x(%d)", reg_index(*ap));
- }
+ erts_print(to, to_arg, "x(%d)", reg_index(*ap));
ap++;
break;
} else if (tag == Y_REG_DEF) {
erts_print(to, to_arg, "y(%d)", reg_index(*ap) - CP_SIZE);
ap++;
break;
- } else if (tag == R_REG_DEF) {
- erts_print(to, to_arg, "x(0)");
- ap++;
- break;
}
/*FALLTHROUGH*/
case 'a': /* Tagged atom */
@@ -483,18 +475,11 @@ print_op(int to, void *to_arg, int op, int size, BeamInstr* addr)
case 'd': /* Destination (x(0), x(N), y(N)) */
switch (beam_reg_tag(*ap)) {
case X_REG_DEF:
- if (reg_index(*ap) == 0) {
- erts_print(to, to_arg, "x[0]");
- } else {
- erts_print(to, to_arg, "x(%d)", reg_index(*ap));
- }
+ erts_print(to, to_arg, "x(%d)", reg_index(*ap));
break;
case Y_REG_DEF:
erts_print(to, to_arg, "y(%d)", reg_index(*ap) - CP_SIZE);
break;
- case R_REG_DEF:
- erts_print(to, to_arg, "x(0)");
- break;
}
ap++;
break;
@@ -677,9 +662,6 @@ print_op(int to, void *to_arg, int op, int size, BeamInstr* addr)
erts_print(to, to_arg, " %T", (Eterm) ap[0]);
} else {
switch ((ap[0] >> 2) & 0x03) {
- case R_REG_DEF:
- erts_print(to, to_arg, " x(0)");
- break;
case X_REG_DEF:
erts_print(to, to_arg, " x(%d)", ap[0] >> 4);
break;
diff --git a/erts/emulator/beam/beam_emu.c b/erts/emulator/beam/beam_emu.c
index 9a34d5f11a..059c443450 100644
--- a/erts/emulator/beam/beam_emu.c
+++ b/erts/emulator/beam/beam_emu.c
@@ -160,8 +160,6 @@ do { \
stb_reg = (DestDesc); \
CHECK_TERM(Result); \
switch (beam_reg_tag(stb_reg)) { \
- case R_REG_DEF: \
- r(0) = (Result); break; \
case X_REG_DEF: \
xb(x_reg_offset(stb_reg)) = (Result); break; \
default: \
@@ -186,8 +184,6 @@ do { \
stb_next = (BeamInstr *) *I; \
CHECK_TERM(Result); \
switch (beam_reg_tag(stb_reg)) { \
- case R_REG_DEF: \
- r(0) = (Result); Goto(stb_next); \
case X_REG_DEF: \
xb(x_reg_offset(stb_reg)) = (Result); Goto(stb_next); \
default: \
@@ -521,7 +517,6 @@ void** beam_ops;
do { \
tr = Arg(pos); \
switch (beam_reg_tag(tr)) { \
- case R_REG_DEF: tr = r(0); break; \
case X_REG_DEF: tr = xb(x_reg_offset(tr)); break; \
case Y_REG_DEF: ASSERT(y_reg_offset(tr) >= 1); tr = yb(y_reg_offset(tr)); break; \
} \
@@ -2391,9 +2386,6 @@ void process_main(void)
do {
Eterm term = *I++;
switch (term & _TAG_IMMED1_MASK) {
- case (R_REG_DEF << _TAG_PRIMARY_SIZE) | TAG_PRIMARY_HEADER:
- *hp++ = r(0);
- break;
case (X_REG_DEF << _TAG_PRIMARY_SIZE) | TAG_PRIMARY_HEADER:
*hp++ = x(term >> _TAG_IMMED1_SIZE);
break;
@@ -2422,9 +2414,6 @@ void process_main(void)
#define PUT_TERM_REG(term, desc) \
do { \
switch ((desc) & _TAG_IMMED1_MASK) { \
- case (R_REG_DEF << _TAG_PRIMARY_SIZE) | TAG_PRIMARY_HEADER: \
- r(0) = (term); \
- break; \
case (X_REG_DEF << _TAG_PRIMARY_SIZE) | TAG_PRIMARY_HEADER: \
x((desc) >> _TAG_IMMED1_SIZE) = (term); \
break; \
@@ -6502,9 +6491,6 @@ static Eterm get_map_element_hash(Eterm map, Eterm key, Uint32 hx)
do { \
Eterm src = (Eterm)(term); \
switch (src & _TAG_IMMED1_MASK) { \
- case (R_REG_DEF << _TAG_PRIMARY_SIZE) | TAG_PRIMARY_HEADER: \
- dest = x(0); \
- break; \
case (X_REG_DEF << _TAG_PRIMARY_SIZE) | TAG_PRIMARY_HEADER: \
dest = x(src >> _TAG_IMMED1_SIZE); \
break; \
diff --git a/erts/emulator/beam/beam_load.c b/erts/emulator/beam/beam_load.c
index f5f1147261..495e92d600 100644
--- a/erts/emulator/beam/beam_load.c
+++ b/erts/emulator/beam/beam_load.c
@@ -2167,7 +2167,7 @@ load_code(LoaderState* stp)
case 's': /* Any source (tagged constant or register) */
switch (tag) {
case TAG_r:
- code[ci++] = make_rreg();
+ code[ci++] = make_xreg(0);
break;
case TAG_x:
code[ci++] = make_xreg(tmp_op->a[arg].val);
@@ -2193,7 +2193,7 @@ load_code(LoaderState* stp)
case 'd': /* Destination (x(0), x(N), y(N) */
switch (tag) {
case TAG_r:
- code[ci++] = make_rreg();
+ code[ci++] = make_xreg(0);
break;
case TAG_x:
code[ci++] = make_xreg(tmp_op->a[arg].val);
@@ -2357,10 +2357,6 @@ load_code(LoaderState* stp)
ci++;
break;
case TAG_r:
- CodeNeed(1);
- code[ci++] = (R_REG_DEF << _TAG_PRIMARY_SIZE) |
- TAG_PRIMARY_HEADER;
- break;
case TAG_x:
CodeNeed(1);
code[ci++] = (tmp_op->a[arg].val << _TAG_IMMED1_SIZE) |
diff --git a/erts/emulator/beam/erl_term.h b/erts/emulator/beam/erl_term.h
index b928e4ca1e..cff2430547 100644
--- a/erts/emulator/beam/erl_term.h
+++ b/erts/emulator/beam/erl_term.h
@@ -1037,11 +1037,9 @@ _ET_DECLARE_CHECKED(Uint,catch_val,Eterm)
#define X_REG_DEF 0
#define Y_REG_DEF 1
-#define R_REG_DEF 2
#define beam_reg_tag(x) ((x) & 3)
-#define make_rreg() R_REG_DEF
#define make_xreg(ix) (((ix) * sizeof(Eterm)) | X_REG_DEF)
#define make_yreg(ix) (((ix) * sizeof(Eterm)) | Y_REG_DEF)