From 48d397229904ded352c60a53ae24c1a61127e1ac Mon Sep 17 00:00:00 2001 From: Stephen Williams Date: Fri, 24 Oct 2014 15:13:28 -0700 Subject: [PATCH] Remove a bunch of dead vvp opcodes. --- tgt-vvp/vvp_process.c | 44 -- vvp/codes.h | 21 - vvp/compile.cc | 21 - vvp/opcodes.txt | 171 ------- vvp/vthread.cc | 1120 +---------------------------------------- 5 files changed, 9 insertions(+), 1368 deletions(-) diff --git a/tgt-vvp/vvp_process.c b/tgt-vvp/vvp_process.c index 4183df81f..22b9ced3c 100644 --- a/tgt-vvp/vvp_process.c +++ b/tgt-vvp/vvp_process.c @@ -290,50 +290,7 @@ static void assign_to_lvector(ivl_lval_t lval, } } else if (part_off>0 || ivl_lval_width(lval)!=ivl_signal_width(sig)) { -#if 0 - /* There is no mux expression, but a constant part - offset. Load that into index x1 and generate a - single-bit set instruction. */ - assert(ivl_lval_width(lval) == width); - if (dexp != 0) { - /* Calculated delay... */ - int delay_index = allocate_word(); - draw_eval_expr_into_integer(dexp, delay_index); - fprintf(vvp_out, " %%ix/load 0, %u, 0;\n", width); - fprintf(vvp_out, " %%ix/load 1, %lu, 0;\n", part_off); - fprintf(vvp_out, " %%assign/v0/x1/d v%p_%lu, %d, %u;\n", - sig, use_word, delay_index, bit); - clr_word(delay_index); - } else if (nevents != 0) { - /* Event control delay... */ - fprintf(vvp_out, " %%ix/load 0, %u, 0;\n", width); - fprintf(vvp_out, " %%ix/load 1, %lu, 0;\n", part_off); - fprintf(vvp_out, " %%assign/v0/x1/e v%p_%lu, %u;\n", - sig, use_word, bit); - } else { - /* Constant delay... */ - fprintf(vvp_out, " %%ix/load 0, %u, 0;\n", width); - fprintf(vvp_out, " %%ix/load 1, %lu, 0;\n", part_off); - /* - * The %assign can only take a 32 bit delay. For a larger - * delay we need to put it into an index register. - */ - if (hig_d != 0) { - int delay_index = allocate_word(); - fprintf(vvp_out, " %%ix/load %d, %lu, %lu;\n", - delay_index, low_d, hig_d); - fprintf(vvp_out, - " %%assign/v0/x1/d v%p_%lu, %d, %u;\n", - sig, use_word, delay_index, bit); - clr_word(delay_index); - } else { - fprintf(vvp_out, - " %%assign/v0/x1 v%p_%lu, %lu, %u;\n", - sig, use_word, low_d, bit); - } - } -#else if (nevents != 0) { assert(dexp==0); int offset_index = allocate_word(); @@ -364,7 +321,6 @@ static void assign_to_lvector(ivl_lval_t lval, clr_word(offset_index); clr_word(delay_index); } -#endif } else if (dexp != 0) { /* Calculated delay... */ diff --git a/vvp/codes.h b/vvp/codes.h index b74c40b95..f3c0511ff 100644 --- a/vvp/codes.h +++ b/vvp/codes.h @@ -34,16 +34,12 @@ typedef bool (*vvp_code_fun)(vthread_t thr, vvp_code_t code); extern bool of_ABS_WR(vthread_t thr, vvp_code_t code); extern bool of_ADD(vthread_t thr, vvp_code_t code); extern bool of_ADD_WR(vthread_t thr, vvp_code_t code); -extern bool of_ADDI(vthread_t thr, vvp_code_t code); extern bool of_ALLOC(vthread_t thr, vvp_code_t code); extern bool of_AND(vthread_t thr, vvp_code_t code); -extern bool of_ANDI(vthread_t thr, vvp_code_t code); extern bool of_ANDR(vthread_t thr, vvp_code_t code); extern bool of_ASSIGN_AR(vthread_t thr, vvp_code_t code); extern bool of_ASSIGN_ARD(vthread_t thr, vvp_code_t code); extern bool of_ASSIGN_ARE(vthread_t thr, vvp_code_t code); -extern bool of_ASSIGN_AV(vthread_t thr, vvp_code_t code); -extern bool of_ASSIGN_AVD(vthread_t thr, vvp_code_t code); extern bool of_ASSIGN_D(vthread_t thr, vvp_code_t code); extern bool of_ASSIGN_MV(vthread_t thr, vvp_code_t code); extern bool of_ASSIGN_VEC4(vthread_t thr, vvp_code_t code); @@ -53,13 +49,9 @@ extern bool of_ASSIGN_VEC4_A_D(vthread_t thr, vvp_code_t code); extern bool of_ASSIGN_VEC4_A_E(vthread_t thr, vvp_code_t code); extern bool of_ASSIGN_VEC4_OFF_D(vthread_t thr, vvp_code_t code); extern bool of_ASSIGN_VEC4_OFF_E(vthread_t thr, vvp_code_t code); -extern bool of_ASSIGN_V0X1(vthread_t thr, vvp_code_t code); -extern bool of_ASSIGN_V0X1D(vthread_t thr, vvp_code_t code); -extern bool of_ASSIGN_V0X1E(vthread_t thr, vvp_code_t code); extern bool of_ASSIGN_WR(vthread_t thr, vvp_code_t code); extern bool of_ASSIGN_WRD(vthread_t thr, vvp_code_t code); extern bool of_ASSIGN_WRE(vthread_t thr, vvp_code_t code); -extern bool of_ASSIGN_X0(vthread_t thr, vvp_code_t code); extern bool of_BLEND(vthread_t thr, vvp_code_t code); extern bool of_BLEND_WR(vthread_t thr, vvp_code_t code); extern bool of_BREAKPOINT(vthread_t thr, vvp_code_t code); @@ -68,8 +60,6 @@ extern bool of_CASSIGN_VEC4(vthread_t thr, vvp_code_t code); extern bool of_CASSIGN_VEC4_OFF(vthread_t thr, vvp_code_t code); extern bool of_CASSIGN_WR(vthread_t thr, vvp_code_t code); extern bool of_CAST2(vthread_t thr, vvp_code_t code); -extern bool of_CMPIS(vthread_t thr, vvp_code_t code); -extern bool of_CMPIU(vthread_t thr, vvp_code_t code); extern bool of_CMPS(vthread_t thr, vvp_code_t code); extern bool of_CMPSTR(vthread_t thr, vvp_code_t code); extern bool of_CMPU(vthread_t thr, vvp_code_t code); @@ -137,10 +127,6 @@ extern bool of_JMP1XZ(vthread_t thr, vvp_code_t code); extern bool of_JOIN(vthread_t thr, vvp_code_t code); extern bool of_JOIN_DETACH(vthread_t thr, vvp_code_t code); extern bool of_LOAD_AR(vthread_t thr, vvp_code_t code); -extern bool of_LOAD_AV(vthread_t thr, vvp_code_t code); -extern bool of_LOAD_AVP0(vthread_t thr, vvp_code_t code); -extern bool of_LOAD_AVP0_S(vthread_t thr, vvp_code_t code); -extern bool of_LOAD_AVX_P(vthread_t thr, vvp_code_t code); extern bool of_LOAD_REAL(vthread_t thr, vvp_code_t code); extern bool of_LOAD_DAR_R(vthread_t thr, vvp_code_t code); extern bool of_LOAD_DAR_STR(vthread_t thr, vvp_code_t code); @@ -153,18 +139,14 @@ extern bool of_LOAD_VEC4(vthread_t thr, vvp_code_t code); extern bool of_LOAD_VEC4A(vthread_t thr, vvp_code_t code); extern bool of_LOAD_VP0(vthread_t thr, vvp_code_t code); extern bool of_LOAD_VP0_S(vthread_t thr, vvp_code_t code); -extern bool of_LOAD_X1P(vthread_t thr, vvp_code_t code); extern bool of_MAX_WR(vthread_t thr, vvp_code_t code); extern bool of_MIN_WR(vthread_t thr, vvp_code_t code); extern bool of_MOD(vthread_t thr, vvp_code_t code); extern bool of_MOD_S(vthread_t thr, vvp_code_t code); extern bool of_MOD_WR(vthread_t thr, vvp_code_t code); -extern bool of_MOV(vthread_t thr, vvp_code_t code); extern bool of_MOV_WU(vthread_t thr, vvp_code_t code); -extern bool of_MOVI(vthread_t thr, vvp_code_t code); extern bool of_MUL(vthread_t thr, vvp_code_t code); extern bool of_MUL_WR(vthread_t thr, vvp_code_t code); -extern bool of_MULI(vthread_t thr, vvp_code_t code); extern bool of_NAND(vthread_t thr, vvp_code_t code); extern bool of_NANDR(vthread_t thr, vvp_code_t code); extern bool of_NEW_COBJ(vthread_t thr, vvp_code_t code); @@ -204,13 +186,11 @@ extern bool of_RELEASE_REG(vthread_t thr, vvp_code_t code); extern bool of_RELEASE_WR(vthread_t thr, vvp_code_t code); extern bool of_REPLICATE(vthread_t thr, vvp_code_t code); extern bool of_SCOPY(vthread_t thr, vvp_code_t code); -extern bool of_SET_AV(vthread_t thr, vvp_code_t code); extern bool of_SET_QB(vthread_t thr, vvp_code_t code); extern bool of_SET_QF(vthread_t thr, vvp_code_t code); extern bool of_SET_DAR_OBJ_REAL(vthread_t thr, vvp_code_t code); extern bool of_SET_DAR_OBJ_STR(vthread_t thr, vvp_code_t code); extern bool of_SET_DAR_OBJ_VEC4(vthread_t thr, vvp_code_t code); -extern bool of_SET_X0(vthread_t thr, vvp_code_t code); extern bool of_SET_X0_X(vthread_t thr, vvp_code_t code); extern bool of_SHIFTL(vthread_t thr, vvp_code_t code); extern bool of_SHIFTR(vthread_t thr, vvp_code_t code); @@ -239,7 +219,6 @@ extern bool of_STORE_VEC4(vthread_t thr, vvp_code_t code); extern bool of_STORE_VEC4A(vthread_t thr, vvp_code_t code); extern bool of_SUB(vthread_t thr, vvp_code_t code); extern bool of_SUB_WR(vthread_t thr, vvp_code_t code); -extern bool of_SUBI(vthread_t thr, vvp_code_t code); extern bool of_SUBSTR(vthread_t thr, vvp_code_t code); extern bool of_SUBSTR_VEC4(vthread_t thr, vvp_code_t code); extern bool of_TEST_NUL(vthread_t thr, vvp_code_t code); diff --git a/vvp/compile.cc b/vvp/compile.cc index fd38da18a..989a0f645 100644 --- a/vvp/compile.cc +++ b/vvp/compile.cc @@ -87,19 +87,12 @@ static const struct opcode_table_s opcode_table[] = { { "%abs/wr", of_ABS_WR, 0, {OA_NONE, OA_NONE, OA_NONE} }, { "%add", of_ADD, 0, {OA_NONE, OA_NONE, OA_NONE} }, { "%add/wr", of_ADD_WR, 0, {OA_NONE, OA_NONE, OA_NONE} }, - { "%addi", of_ADDI, 3, {OA_BIT1, OA_BIT2, OA_NUMBER} }, { "%alloc", of_ALLOC, 1, {OA_VPI_PTR, OA_NONE, OA_NONE} }, { "%and", of_AND, 0, {OA_NONE, OA_NONE, OA_NONE} }, { "%and/r", of_ANDR, 0, {OA_NONE, OA_NONE, OA_NONE} }, - { "%andi", of_ANDI, 3, {OA_BIT1, OA_BIT2, OA_NUMBER} }, { "%assign/ar",of_ASSIGN_AR,2,{OA_ARR_PTR,OA_BIT1, OA_NONE} }, { "%assign/ar/d",of_ASSIGN_ARD,2,{OA_ARR_PTR,OA_BIT1, OA_NONE} }, { "%assign/ar/e",of_ASSIGN_ARE,1,{OA_ARR_PTR,OA_NONE, OA_NONE} }, - { "%assign/av",of_ASSIGN_AV,3,{OA_ARR_PTR,OA_BIT1, OA_BIT2} }, - { "%assign/av/d",of_ASSIGN_AVD,3,{OA_ARR_PTR,OA_BIT1, OA_BIT2} }, - { "%assign/v0/x1",of_ASSIGN_V0X1,3,{OA_FUNC_PTR,OA_BIT1,OA_BIT2} }, - { "%assign/v0/x1/d",of_ASSIGN_V0X1D,3,{OA_FUNC_PTR,OA_BIT1,OA_BIT2} }, - { "%assign/v0/x1/e",of_ASSIGN_V0X1E,2,{OA_FUNC_PTR,OA_BIT1,OA_NONE} }, { "%assign/vec4", of_ASSIGN_VEC4, 2, {OA_FUNC_PTR, OA_BIT1, OA_NONE} }, { "%assign/vec4/a/d", of_ASSIGN_VEC4_A_D, 3, {OA_ARR_PTR, OA_BIT1, OA_BIT2} }, { "%assign/vec4/a/e", of_ASSIGN_VEC4_A_E, 2, {OA_ARR_PTR, OA_BIT1, OA_NONE} }, @@ -110,7 +103,6 @@ static const struct opcode_table_s opcode_table[] = { { "%assign/wr", of_ASSIGN_WR, 2,{OA_VPI_PTR, OA_BIT1, OA_NONE} }, { "%assign/wr/d",of_ASSIGN_WRD,2,{OA_VPI_PTR, OA_BIT1, OA_NONE} }, { "%assign/wr/e",of_ASSIGN_WRE,1,{OA_VPI_PTR, OA_NONE, OA_NONE} }, - { "%assign/x0",of_ASSIGN_X0,3,{OA_FUNC_PTR,OA_BIT1, OA_BIT2} }, { "%blend", of_BLEND, 0, {OA_NONE, OA_NONE, OA_NONE} }, { "%blend/wr", of_BLEND_WR,0, {OA_NONE, OA_NONE, OA_NONE} }, { "%breakpoint", of_BREAKPOINT, 0, {OA_NONE, OA_NONE, OA_NONE} }, @@ -127,8 +119,6 @@ static const struct opcode_table_s opcode_table[] = { { "%cmp/wu", of_CMPWU, 2, {OA_BIT1, OA_BIT2, OA_NONE} }, { "%cmp/x", of_CMPX, 0, {OA_NONE, OA_NONE, OA_NONE} }, { "%cmp/z", of_CMPZ, 0, {OA_NONE, OA_NONE, OA_NONE} }, - { "%cmpi/s", of_CMPIS, 3, {OA_BIT1, OA_BIT2, OA_NUMBER} }, - { "%cmpi/u", of_CMPIU, 3, {OA_BIT1, OA_BIT2, OA_NUMBER} }, { "%concat/str", of_CONCAT_STR, 0,{OA_NONE, OA_NONE, OA_NONE} }, { "%concat/vec4",of_CONCAT_VEC4,0,{OA_NONE, OA_NONE, OA_NONE} }, { "%concati/str",of_CONCATI_STR,1,{OA_STRING,OA_NONE, OA_NONE} }, @@ -185,10 +175,6 @@ static const struct opcode_table_s opcode_table[] = { { "%join", of_JOIN, 0, {OA_NONE, OA_NONE, OA_NONE} }, { "%join/detach",of_JOIN_DETACH,1,{OA_NUMBER,OA_NONE, OA_NONE} }, { "%load/ar",of_LOAD_AR,2, {OA_ARR_PTR, OA_BIT1, OA_NONE} }, - { "%load/av",of_LOAD_AV,3, {OA_BIT1, OA_ARR_PTR, OA_BIT2} }, - { "%load/avp0",of_LOAD_AVP0,3, {OA_BIT1, OA_ARR_PTR, OA_BIT2} }, - { "%load/avp0/s",of_LOAD_AVP0_S,3,{OA_BIT1,OA_ARR_PTR, OA_BIT2} }, - { "%load/avx.p",of_LOAD_AVX_P,3,{OA_BIT1, OA_ARR_PTR, OA_BIT2} }, { "%load/dar/r", of_LOAD_DAR_R, 1, {OA_FUNC_PTR, OA_NONE, OA_NONE}}, { "%load/dar/str",of_LOAD_DAR_STR, 1, {OA_FUNC_PTR, OA_NONE, OA_NONE} }, { "%load/dar/vec4",of_LOAD_DAR_VEC4,1, {OA_FUNC_PTR, OA_NONE, OA_NONE} }, @@ -201,18 +187,14 @@ static const struct opcode_table_s opcode_table[] = { { "%load/vec4a", of_LOAD_VEC4A,2,{OA_ARR_PTR, OA_BIT1, OA_NONE} }, { "%load/vp0",of_LOAD_VP0,3,{OA_BIT1, OA_FUNC_PTR, OA_BIT2} }, { "%load/vp0/s",of_LOAD_VP0_S,3,{OA_BIT1, OA_FUNC_PTR, OA_BIT2} }, - { "%load/x1p",of_LOAD_X1P,3,{OA_BIT1, OA_FUNC_PTR, OA_BIT2} }, { "%max/wr", of_MAX_WR, 0, {OA_NONE, OA_NONE, OA_NONE} }, { "%min/wr", of_MIN_WR, 0, {OA_NONE, OA_NONE, OA_NONE} }, { "%mod", of_MOD, 0, {OA_NONE, OA_NONE, OA_NONE} }, { "%mod/s", of_MOD_S, 0, {OA_NONE, OA_NONE, OA_NONE} }, { "%mod/wr", of_MOD_WR, 0, {OA_NONE, OA_NONE, OA_NONE} }, - { "%mov", of_MOV, 3, {OA_BIT1, OA_BIT2, OA_NUMBER} }, { "%mov/wu", of_MOV_WU, 2, {OA_BIT1, OA_BIT2, OA_NONE} }, - { "%movi", of_MOVI, 3, {OA_BIT1, OA_BIT2, OA_NUMBER} }, { "%mul", of_MUL, 0, {OA_NONE, OA_NONE, OA_NONE} }, { "%mul/wr", of_MUL_WR, 0, {OA_NONE, OA_NONE, OA_NONE} }, - { "%muli", of_MULI, 3, {OA_BIT1, OA_BIT2, OA_NUMBER} }, { "%nand", of_NAND, 0, {OA_NONE, OA_NONE, OA_NONE} }, { "%nand/r", of_NANDR, 0, {OA_NONE, OA_NONE, OA_NONE} }, { "%new/cobj", of_NEW_COBJ, 1, {OA_VPI_PTR,OA_NONE, OA_NONE} }, @@ -252,13 +234,11 @@ static const struct opcode_table_s opcode_table[] = { { "%release/wr", of_RELEASE_WR, 2,{OA_FUNC_PTR,OA_BIT1,OA_NONE} }, { "%replicate", of_REPLICATE, 1,{OA_NUMBER, OA_NONE,OA_NONE} }, { "%scopy", of_SCOPY, 0, {OA_NONE, OA_NONE, OA_NONE} }, - { "%set/av", of_SET_AV, 3, {OA_ARR_PTR, OA_BIT1, OA_BIT2} }, { "%set/dar/obj/real",of_SET_DAR_OBJ_REAL,1,{OA_NUMBER,OA_NONE,OA_NONE} }, { "%set/dar/obj/str", of_SET_DAR_OBJ_STR, 1,{OA_NUMBER,OA_NONE,OA_NONE} }, { "%set/dar/obj/vec4",of_SET_DAR_OBJ_VEC4,1,{OA_NUMBER,OA_NONE,OA_NONE} }, { "%set/qb", of_SET_QB, 3, {OA_FUNC_PTR, OA_BIT1, OA_BIT2} }, { "%set/qf", of_SET_QF, 3, {OA_FUNC_PTR, OA_BIT1, OA_BIT2} }, - { "%set/x0", of_SET_X0, 3, {OA_FUNC_PTR, OA_BIT1, OA_BIT2} }, { "%shiftl", of_SHIFTL, 1, {OA_NUMBER, OA_NONE, OA_NONE} }, { "%shiftr", of_SHIFTR, 1, {OA_NUMBER, OA_NONE, OA_NONE} }, { "%shiftr/s", of_SHIFTR_S, 1, {OA_NUMBER, OA_NONE, OA_NONE} }, @@ -286,7 +266,6 @@ static const struct opcode_table_s opcode_table[] = { { "%store/vec4a", of_STORE_VEC4A, 3, {OA_ARR_PTR, OA_BIT1, OA_BIT2} }, { "%sub", of_SUB, 0, {OA_NONE, OA_NONE, OA_NONE} }, { "%sub/wr", of_SUB_WR, 0, {OA_NONE, OA_NONE, OA_NONE} }, - { "%subi", of_SUBI, 3, {OA_BIT1, OA_BIT2, OA_NUMBER} }, { "%substr", of_SUBSTR, 2,{OA_BIT1, OA_BIT2, OA_NONE} }, { "%substr/vec4",of_SUBSTR_VEC4,2,{OA_BIT1, OA_BIT2, OA_NONE} }, { "%test_nul", of_TEST_NUL, 1,{OA_FUNC_PTR,OA_NONE, OA_NONE} }, diff --git a/vvp/opcodes.txt b/vvp/opcodes.txt index c7c71a619..95d005cb7 100644 --- a/vvp/opcodes.txt +++ b/vvp/opcodes.txt @@ -69,13 +69,6 @@ pushed in place See also the %sub/wr instruction. - -* %addi , , - -This instruction adds the immediate value (no x or z bits) into the -left vector. The imm value is limited to 16 significant bits, but it -is zero extended to match any width. - * %alloc This instruction allocates the storage for a new instance of an @@ -120,31 +113,6 @@ The %assign/ar/e variation uses the information in the thread event control registers to determine when to perform the assign. %evctl is used to set the event control information. -* %assign/av , , (XXXX Old definition) -* %assign/av/d , , (XXXX Old definition) -* %assign/av/e , (XXXX Old definition) - -The %assign/av instruction assigns a vector value to a word in the -labeled array. The is the delay in simulation time to the -assignment (0 for non-blocking assignment) and the is the base -of the vector to write. - -The width of the vector is retrieved from index register 0. - -The base of a part select is retrieved from index register 1. - -The address of the word in the memory is from index register 3. The -address is canonical form. - -The %assign/av/d variation reads the delay from an integer register that -is given by the value. This should not be 0, 1 or 3, of course, -since these registers contain the vector width, base part select and -word address. - -The %assign/av/e variation uses the information in the thread -event control registers to determine when to perform the assign. -%evctl is used to set the event control information. - * %assign/v0 , , (XXXX Old description) * %assign/v0/d , , (XXXX Old description * %assign/v0/e , (XXXX Old description) @@ -166,14 +134,6 @@ event control registers to determine when to perform the assign. The references a .var object that can receive non-blocking assignments. For blocking assignments, see %set/v. -* %assign/v0/x1 , , -* %assign/v0/x1/d , , -* %assign/v0/x1/e , - -This is similar to the %assign/v0 instruction, but adds the index-1 -index register with the canonical index of the destination where the -vector is to be written. This allows for part writes into the vector. - * %assign/vec4 , * %assign/vec4/d , * %assign/vec4/e @@ -230,19 +190,6 @@ The %assign/wr/e variation uses the information in the thread event control registers to determine when to perform the assign. %evctl is used to set the event control information. -* %assign/x0 , , (OBSOLETE -- See %assign/v0x) - -This does a non-blocking assignment to a functor, similar to the -%assign instruction. The identifies the base functor of -the affected variable, and the gives the delay when the -assignment takes place. The delay may be 0. The actual functor used is -calculated by using as a base, and indexing with the -index[0] index register. This supports indexed assignment. - -The is the address of the thread register that contains the bit -value to assign. - - * %blend This instruction blends the bits of two vectors into a result in a @@ -344,13 +291,6 @@ The results of the comparison go into flags 4, 5, 6 and 7: 5: lt (less than) 6: eeq (case equal) -* %cmpi/s , , -* %cmpi/u , , - -These instructions are similar to the %cmp instructions above, except -that the right hand operand is an immediate value. This is a positive -number that the vector is compared with. - * %cmp/wr Compare real values for equality and less-then. This opcode pops to @@ -715,43 +655,6 @@ the children, and none of those children may be automatic. This instruction is used to implement join_none and join_any from the Verilog source. -* %load/av , , - -This instruction loads a word from the specified array. The word -address is in index register 3. Like %load/v below the width does -not have to match the width of the array word. See the %load/v -description for more information. - -* %load/avp0 , , -* %load/avp0/s , , - -This instruction is a mix of %load/av and %load/vp0. It loads an array -value like %load/av and then adds a value from index register 0 to the -result like %load/vp0. The loaded value is zero-extended to , -then added arithmetically to the signed index register 0. The result -is then stored in . - -The %load/avp0/s instruction is the same, except that the loaded -vector is sign extended (instead of 0-extended) before the addition. - -* %load/avx.p , , - -This instruction is similar to %load/av, but it loads only a single -bit, and the is the selector for the bit to use. If is -out of range, then x is loaded. The index value is incremented by one -if it is defined (bit 4 is not 1). - -* %load/dar , , (XXXX Old implementation) - -This instruction loads an array word from a dynamic array. The -