diff --git a/ChangeLog b/ChangeLog index 590ffdfc6..cd7bcb46c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2010-11-21 Robert Larice + * src/xspice/icm/digital/d_ram/cfunc.mod , + * src/xspice/icm/digital/d_source/cfunc.mod , + * src/xspice/icm/digital/d_state/cfunc.mod : + d_source d_state d_ram, rewrite index operations + 2010-11-21 Robert Larice * src/xspice/icm/digital/d_source/cfunc.mod , * src/xspice/icm/digital/d_state/cfunc.mod : diff --git a/src/xspice/icm/digital/d_ram/cfunc.mod b/src/xspice/icm/digital/d_ram/cfunc.mod index 308b34337..4f9fa8c8b 100644 --- a/src/xspice/icm/digital/d_ram/cfunc.mod +++ b/src/xspice/icm/digital/d_ram/cfunc.mod @@ -589,21 +589,13 @@ static void cm_initialize_ram(Digital_State_t out,int word_width,int bit_number, short base; /* variable to hold current base integer for comparison purposes. */ - double double1, /* holding variable for doubles */ - double2; /* holding variable for doubles */ - - /* obtain offset value from word_number, word_width & bit_number */ int1 = word_number * word_width + bit_number; - double1 = int1 / 8.0; - modf(double1, &double2); - ram_offset = int1 - (double2 * 8.0); - /* obtain ram_index value */ - modf( int1/8.0, &double1); - ram_index = double1; + ram_index = int1 >> 3; + ram_offset = int1 & 7; /* retrieve entire base_address ram integer... */ base = ram[ram_index]; @@ -690,10 +682,6 @@ static void cm_store_ram_value(Digital_State_t out,int word_width,int bit_number short base; /* variable to hold current base integer for comparison purposes. */ - double double1, - double2; /* holding variables for modf routine */ - - /** first obtain word_number from *address values **/ err = cm_address_to_decimal(address,address_size,&word_number); @@ -702,13 +690,9 @@ static void cm_store_ram_value(Digital_State_t out,int word_width,int bit_number /* obtain offset value from word_number, word_width & bit_number */ int1 = word_number * word_width + bit_number; - double1 = int1 / 8.0; - modf(double1, &double2); - ram_offset = int1 - (double2 * 8.0); - /* obtain ram_index value */ - modf( int1/8.0, &double1); - ram_index = double1; + ram_index = int1 >> 3; + ram_offset = int1 & 7; /* retrieve entire base_address ram integer... */ base = ram[ram_index]; @@ -796,9 +780,6 @@ static void cm_get_ram_value(int word_width,int bit_number,Digital_State_t *addr short base; /* variable to hold current base integer for comparison purposes. */ - double double1, - double2; /* holding variables for modf routine */ - /** first obtain word_number from *address values **/ err = cm_address_to_decimal(address,address_size,&word_number); @@ -808,13 +789,9 @@ static void cm_get_ram_value(int word_width,int bit_number,Digital_State_t *addr /* obtain offset value from word_number, word_width & bit_number */ int1 = word_number * word_width + bit_number; - double1 = int1 / 8.0; - modf(double1, &double2); - ram_offset = int1 - (double2 * 8.0); - /* obtain ram_index value */ - modf( int1/8.0, &double1); - ram_index = double1; + ram_index = int1 >> 3; + ram_offset = int1 & 7; /* retrieve entire base_address ram integer... */ base = ram[ram_index]; diff --git a/src/xspice/icm/digital/d_source/cfunc.mod b/src/xspice/icm/digital/d_source/cfunc.mod index 699570685..8b01fc796 100644 --- a/src/xspice/icm/digital/d_source/cfunc.mod +++ b/src/xspice/icm/digital/d_source/cfunc.mod @@ -739,17 +739,13 @@ static void cm_get_source_value(int word_width,int bit_number,int index, short base; /* variable to hold current base integer for comparison purposes. */ - double double1, - double2; /* holding variables for modf routine */ - /* obtain offset value from index, word_width & bit_number */ int1 = index * word_width + bit_number; - double1 = int1 / 4.0; - modf(double1, &double2); - bit_index = double2; - bit_offset = int1 - (double2 * 4.0); + + bit_index = int1 >> 2; + bit_offset = int1 & 3; /* retrieve entire base_address bits integer... */ base = bits[bit_index]; @@ -838,9 +834,6 @@ static int cm_read_source(FILE *source,short *bits,double *timepoints, double number; /* holding variable for timepoint values */ - double double1, /* temporary holding variable */ - double2; /* temporary holding variable */ - short bit_value, /* holding variable for value read from source file which needs to be stored */ base; /* holding variable for existing @@ -931,10 +924,8 @@ static int cm_read_source(FILE *source,short *bits,double *timepoints, /* obtain offset value from word_number, word_width & bit_number */ int1 = i * info->width + (j-1); - double1 = int1 / 4.0; - modf(double1, &double2); - bit_index = double2; - bit_offset = int1 - (double2 * 4.0); + bit_index = int1 >> 2; + bit_offset = int1 & 3; /* retrieve entire base_address bits integer... */ base = bits[bit_index]; @@ -1033,8 +1024,7 @@ void cm_d_source(ARGS) timepoints...this will have size equal to "depth" */ *timepoints_old, /* the storage array for the old timepoints */ - test_double, /* test variable for doubles */ - double_dummy; /* fake holding double */ + test_double; /* test variable for doubles */ @@ -1091,8 +1081,7 @@ void cm_d_source(ARGS) - modf( (PORT_SIZE(out) * i / 4), &double_dummy ); - dummy = double_dummy + 1; + dummy = (PORT_SIZE(out) * i + 3) >> 2; cm_event_alloc(1, dummy * (int) sizeof(short)); @@ -1176,8 +1165,7 @@ void cm_d_source(ARGS) bits_old = (short *) cm_event_get_ptr(1,1); /* Set old values to new... */ - modf( (info->width * info->depth / 4), &double_dummy ); - dummy = double_dummy + 1; + dummy = (info->width * info->depth + 3) >> 2; for (i=0; inum_inputs + bit_number; - double1 = int1 / 8.0; - modf(double1, &double2); - bit_index = double2; - bit_offset = int1 - (double2 * 8.0); + + bit_index = int1 >> 3; + bit_offset = int1 & 7; /* retrieve entire base_address bits integer... */ base = states->inputs[bit_index]; @@ -998,18 +994,14 @@ static void cm_store_inputs_value(State_Table_t *states,int index, int bit_numbe short base; /* variable to hold current base integer for comparison purposes. */ - double double1, - double2; /* holding variables for modf routine */ - /* obtain offset value from word_number, word_width & bit_number */ int1 = index * states->num_inputs + bit_number; - double1 = int1 / 8.0; - modf(double1, &double2); - bit_index = double2; - bit_offset = int1 - (double2 * 8.0); + + bit_index = int1 >> 3; + bit_offset = int1 & 7; /* retrieve entire base_address bits integer... */ base = states->inputs[bit_index]; @@ -1319,17 +1311,13 @@ static void cm_get_bits_value(State_Table_t *states,int index, int bit_number, short base; /* variable to hold current base integer for comparison purposes. */ - double double1, - double2; /* holding variables for modf routine */ - /* obtain offset value from index, word_width & bit_number */ int1 = index * states->num_outputs + bit_number; - double1 = int1 / 4.0; - modf(double1, &double2); - bit_index = double2; - bit_offset = int1 - (double2 * 4.0); + + bit_index = int1 >> 2; + bit_offset = int1 & 3; /* retrieve entire base_address bits integer... */ base = states->bits[bit_index]; @@ -1412,18 +1400,14 @@ static void cm_store_bits_value(State_Table_t *states,int index, int bit_number, short base; /* variable to hold current base integer for comparison purposes. */ - double double1, - double2; /* holding variables for modf routine */ - /* obtain offset value from word_number, word_width & bit_number */ int1 = index * states->num_outputs + bit_number; - double1 = int1 / 4.0; - modf(double1, &double2); - bit_index = double2; - bit_offset = int1 - (double2 * 4.0); + + bit_index = int1 >> 2; + bit_offset = int1 & 3; /* retrieve entire base_address bits integer... */ base = states->bits[bit_index];