From fe39fe193218ad619f152ef22ab32ee95d0c880f Mon Sep 17 00:00:00 2001 From: dzaima Date: Wed, 10 May 2023 22:21:36 +0300 Subject: [PATCH] remove Md1H/MD2R --- src/README.md | 2 +- src/core/derv.c | 7 ------- src/core/derv.h | 9 --------- src/h.h | 3 +-- src/jit/nvm_x86_64.c | 4 +--- src/vm.c | 1 - 6 files changed, 3 insertions(+), 23 deletions(-) diff --git a/src/README.md b/src/README.md index c1f6c009..e7fe63f8 100644 --- a/src/README.md +++ b/src/README.md @@ -122,7 +122,7 @@ type field for heap-allocated objects: t_shape // shape object t_fork, t_atop // (F G H), (F G); Fork, Atop - t_md1D, t_md2D, t_md2H // (F _m), (F _m_ G), unused (_m_ G); Md1D, Md2D, Md2H + t_md1D, t_md2D // (F _m), (F _m_ G); Md1D, Md2D t_harr // array with generic items and no fill; HArr t_fillarr // array with generic items and a fill; FillArr diff --git a/src/core/derv.c b/src/core/derv.c index e74756b1..e363ddfb 100644 --- a/src/core/derv.c +++ b/src/core/derv.c @@ -4,19 +4,16 @@ DEF_FREE(md1D) { ptr_dec(((Md1D*)x)->m1); dec(((Md1D*)x)->f); } DEF_FREE(md2D) { ptr_dec(((Md2D*)x)->m2); dec(((Md2D*)x)->f); dec(((Md2D*)x)->g); } -DEF_FREE(md2H) { ptr_dec(((Md2H*)x)->m2); dec(((Md2H*)x)->g); } DEF_FREE(fork) { dec(((Fork*)x)->f ); dec(((Fork*)x)->g); dec(((Fork*)x)->h); } DEF_FREE(atop) { dec(((Atop*)x)->g); dec(((Atop*)x)->h); } static void md1D_visit(Value* x) { mm_visitP(((Md1D*)x)->m1); mm_visit(((Md1D*)x)->f); } static void md2D_visit(Value* x) { mm_visitP(((Md2D*)x)->m2); mm_visit(((Md2D*)x)->f); mm_visit(((Md2D*)x)->g); } -static void md2H_visit(Value* x) { mm_visitP(((Md2H*)x)->m2); mm_visit(((Md2H*)x)->g); } static void fork_visit(Value* x) { mm_visit (((Fork*)x)->f ); mm_visit(((Fork*)x)->g); mm_visit(((Fork*)x)->h); } static void atop_visit(Value* x) { mm_visit(((Atop*)x)->g); mm_visit(((Atop*)x)->h); } static void md1D_print(FILE* f, B x) { fprintf(f,"(md1D ");fprintI(f,c(Md1D,x)->f);fprintf(f," ");fprintI(f,tag(c(Md1D,x)->m1,MD1_TAG)); fprintf(f,")"); } static void md2D_print(FILE* f, B x) { fprintf(f,"(md2D ");fprintI(f,c(Md2D,x)->f);fprintf(f," ");fprintI(f,tag(c(Md2D,x)->m2,MD2_TAG));fprintf(f," ");fprintI(f,c(Md2D,x)->g);fprintf(f,")"); } -static void md2H_print(FILE* f, B x) { fprintf(f,"(md2H "); fprintI(f,tag(c(Md2H,x)->m2,MD2_TAG));fprintf(f," ");fprintI(f,c(Md2H,x)->g);fprintf(f,")"); } static void fork_print(FILE* f, B x) { fprintf(f,"(fork ");fprintI(f,c(Fork,x)->f);fprintf(f," ");fprintI(f, c(Fork,x)->g );fprintf(f," ");fprintI(f,c(Fork,x)->h);fprintf(f,")"); } static void atop_print(FILE* f, B x) { fprintf(f,"(atop "); fprintI(f, c(Atop,x)->g );fprintf(f," ");fprintI(f,c(Atop,x)->h);fprintf(f,")"); } @@ -46,12 +43,9 @@ B fork_c2(B t, B w, B x) { return c2(c(Fork,t)->g, inc(f), c2(h,w,x)); } } -B md2H_c1(Md1D* m, B x) { Md2H* t=(Md2H*) m->m1; return md2D_c1(m_md2D(t->m2, m->f, t->g), x); } -B md2H_c2(Md1D* m, B w, B x) { Md2H* t=(Md2H*) m->m1; return md2D_c2(m_md2D(t->m2, m->f, t->g), w, x); } static B md1D_decompose(B x) { B r=m_hvec3(m_i32(4),inc(c(Md1D,x)->f),tag(ptr_inc(c(Md1D,x)->m1),MD1_TAG) ); decR(x); return r; } static B md2D_decompose(B x) { B r=m_hvec4(m_i32(5),inc(c(Md2D,x)->f),tag(ptr_inc(c(Md2D,x)->m2),MD2_TAG), inc(c(Md2D,x)->g)); decR(x); return r; } -static B md2H_decompose(B x) { B r=m_hvec3(m_i32(6), tag(ptr_inc(c(Md2H,x)->m2),MD2_TAG), inc(c(Md2H,x)->g)); decR(x); return r; } static B fork_decompose(B x) { B r=m_hvec4(m_i32(3),inc(c(Fork,x)->f), inc(c(Fork,x)->g ), inc(c(Fork,x)->h)); decR(x); return r; } static B atop_decompose(B x) { B r=m_hvec3(m_i32(2), inc(c(Atop,x)->g ), inc(c(Atop,x)->h)); decR(x); return r; } @@ -136,7 +130,6 @@ static B md1D_identity(B t) { void derv_init(void) { TIi(t_md1D,freeO) = md1D_freeO; TIi(t_md1D,freeF) = md1D_freeF; TIi(t_md1D,visit) = md1D_visit; TIi(t_md1D,print) = md1D_print; TIi(t_md1D,decompose) = md1D_decompose; TIi(t_md2D,freeO) = md2D_freeO; TIi(t_md2D,freeF) = md2D_freeF; TIi(t_md2D,visit) = md2D_visit; TIi(t_md2D,print) = md2D_print; TIi(t_md2D,decompose) = md2D_decompose; - TIi(t_md2H,freeO) = md2H_freeO; TIi(t_md2H,freeF) = md2H_freeF; TIi(t_md2H,visit) = md2H_visit; TIi(t_md2H,print) = md2H_print; TIi(t_md2H,decompose) = md2H_decompose; TIi(t_fork,freeO) = fork_freeO; TIi(t_fork,freeF) = fork_freeF; TIi(t_fork,visit) = fork_visit; TIi(t_fork,print) = fork_print; TIi(t_fork,decompose) = fork_decompose; TIi(t_atop,freeO) = atop_freeO; TIi(t_atop,freeF) = atop_freeF; TIi(t_atop,visit) = atop_visit; TIi(t_atop,print) = atop_print; TIi(t_atop,decompose) = atop_decompose; TIi(t_md1BI,m1_d) = m1BI_d; diff --git a/src/core/derv.h b/src/core/derv.h index 4efe96b4..e435f449 100644 --- a/src/core/derv.h +++ b/src/core/derv.h @@ -10,11 +10,6 @@ struct Md2D { // F _md_ G Md2* m2; B f, g; }; -typedef struct Md2H { // _md_ G - struct Md1; - Md2* m2; - B g; -} Md2H; typedef struct Fork { struct Fun; B f, g, h; @@ -32,16 +27,12 @@ B tr2D_c1(B t, B x); B tr2D_c2(B t, B w, B x); B fork_c1(B t, B x); B fork_c2(B t, B w, B x); -B md2H_c1(Md1D* d, B x); -B md2H_c2(Md1D* d, B w, B x); // consume all args static B m_md1D(Md1* m, B f ) { Md1D* r = mm_alloc(sizeof(Md1D), t_md1D); r->f = f; r->m1 = m; r->c1=md1D_c1; r->c2=md1D_c2; return tag(r,FUN_TAG); } static B m_md2D(Md2* m, B f, B g) { Md2D* r = mm_alloc(sizeof(Md2D), t_md2D); r->f = f; r->m2 = m; r->g = g; r->c1=md2D_c1; r->c2=md2D_c2; return tag(r,FUN_TAG); } -static B m_md2H(Md2* m, B g) { Md2H* r = mm_alloc(sizeof(Md2H), t_md2H); r->m2 = m; r->g = g; r->c1=md2H_c1; r->c2=md2H_c2; return tag(r,MD1_TAG); } static B m_fork(B f, B g, B h) { Fork* r = mm_alloc(sizeof(Fork), t_fork); r->f = f; r->g = g; r->h = h; r->c1=fork_c1; r->c2=fork_c2; return tag(r,FUN_TAG); } static B m_atop( B g, B h) { Atop* r = mm_alloc(sizeof(Atop), t_atop); r->g = g; r->h = h; r->c1=tr2D_c1; r->c2=tr2D_c2; return tag(r,FUN_TAG); } // consume all args static B m1_d(B m, B f ) { if(isMd1(m)) return TI(m,m1_d)(m, f ); thrM("Interpreting non-1-modifier as 1-modifier"); } static B m2_d(B m, B f, B g) { if(isMd2(m)) return TI(m,m2_d)(m, f, g); thrM("Interpreting non-2-modifier as 2-modifier"); } -static B m2_h(B m, B g) { if(isMd2(m)) return m_md2H(c(Md2,m), g); thrM("Interpreting non-2-modifier as 2-modifier"); } diff --git a/src/h.h b/src/h.h index 66ee6fcc..b12c8ecc 100644 --- a/src/h.h +++ b/src/h.h @@ -264,8 +264,7 @@ FORCE_INLINE B r_fB(f64 x) { return b(x); } /* 5*/ F(md2BI) F(md2Bl) \ /* 7*/ F(shape) /* doesn't get visited in arrays, won't be freed by gc */ \ \ - /* 8*/ F(fork) F(atop) \ - /*10*/ F(md1D) F(md2D) F(md2H) \ + /* 8*/ F(fork) F(atop) F(md1D) F(md2D) \ \ /*13*/ F(hslice) F(fillslice) F(i8slice) F(i16slice) F(i32slice) F(c8slice) F(c16slice) F(c32slice) F(f64slice) \ /*22*/ F(harr ) F(fillarr ) F(i8arr ) F(i16arr ) F(i32arr ) F(c8arr ) F(c16arr ) F(c32arr ) F(f64arr ) \ diff --git a/src/jit/nvm_x86_64.c b/src/jit/nvm_x86_64.c index c3bb9990..401d74c6 100644 --- a/src/jit/nvm_x86_64.c +++ b/src/jit/nvm_x86_64.c @@ -157,7 +157,6 @@ INS B i_DFND_1(u32* bc, Scope* sc, Block* bl) { POS_UPD; return m_md1Block(bl, s INS B i_DFND_2(u32* bc, Scope* sc, Block* bl) { POS_UPD; return m_md2Block(bl, sc); } INS B i_MD1C(B f,B m, u32* bc) { POS_UPD; return m1_d (m,f ); } INS B i_MD2C(B f,B m, B g, u32* bc) { POS_UPD; return m2_d (m,f,g); } -INS B i_MD2R(B m, B g ) { return m2_h (m, g); } INS B i_TR2D(B g, B h ) { return m_atop( g,h); } INS B i_TR3D(B f,B g, B h ) { return m_fork(f,g,h); } INS B i_TR3O(B f,B g, B h ) { return q_N(f)? m_atop(g,h) : m_fork(f,g,h); } @@ -687,8 +686,7 @@ Nvm_res m_nvm(Body* body) { break; case MD1C: TOPp; GET(R_A1,1,1); IMM(R_A2,off); CCALL(i_MD1C); break; // (B f,B m, u32* bc) case MD2C: TOPp; GET(R_A1,1,0); GET(R_A2,2,1); IMM(R_A3,off); CCALL(i_MD2C); break; // (B f,B m, B g, u32* bc) - case MD2R: TOPp; GET(R_A1,1,1); CCALL(i_MD2R); break; // (B m, B g) // TODO these can actually error on OOM so should do something with bc/gStack - case TR2D: TOPp; GET(R_A1,1,1); CCALL(i_TR2D); break; // (B g, B h) + case TR2D: TOPp; GET(R_A1,1,1); CCALL(i_TR2D); break; // (B g, B h) // TODO these can actually error on OOM so should do something with bc/gStack case TR3D: TOPp; GET(R_A1,1,0); GET(R_A2,2,1); CCALL(i_TR3D); break; // (B f,B g, B h) case TR3O: TOPp; GET(R_A1,1,0); GET(R_A2,2,1); CCALL(i_TR3O); break; // (B f,B g, B h) case VARM: TOPs; { u64 d=*bc++; u64 p=*bc++; IMM(R_RES, tagu64((u64)d<<32 | (u32)p, VAR_TAG).u); } break; diff --git a/src/vm.c b/src/vm.c index 31fda981..f0572c19 100644 --- a/src/vm.c +++ b/src/vm.c @@ -799,7 +799,6 @@ B evalBC(Body* b, Scope* sc, Block* bl) { // doesn't consume case MD1C: { P(f)P(m) GS_UPD;POS_UPD; ADD(m1_d (m,f )); break; } case MD2C: { P(f)P(m)P(g) GS_UPD;POS_UPD; ADD(m2_d (m,f,g)); break; } - case MD2R: { P(m)P(g) GS_UPD; ADD(m2_h (m, g)); break; } case TR2D: { P(g)P(h) GS_UPD; ADD(m_atop( g,h)); break; } case TR3D: { P(f)P(g)P(h) GS_UPD; ADD(m_fork(f,g,h)); break; } case TR3O: { P(f)P(g)P(h) GS_UPD;