Add word integer compares.
This commit is contained in:
parent
c39976fbf1
commit
65584e6dde
|
|
@ -19,7 +19,7 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||
*/
|
||||
#ifdef HAVE_CVS_IDENT
|
||||
#ident "$Id: codes.h,v 1.74 2005/06/14 01:44:09 steve Exp $"
|
||||
#ident "$Id: codes.h,v 1.75 2005/09/14 02:50:07 steve Exp $"
|
||||
#endif
|
||||
|
||||
|
||||
|
|
@ -56,6 +56,8 @@ 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_CMPU(vthread_t thr, vvp_code_t code);
|
||||
extern bool of_CMPWR(vthread_t thr, vvp_code_t code);
|
||||
extern bool of_CMPWS(vthread_t thr, vvp_code_t code);
|
||||
extern bool of_CMPWU(vthread_t thr, vvp_code_t code);
|
||||
extern bool of_CMPX(vthread_t thr, vvp_code_t code);
|
||||
extern bool of_CMPZ(vthread_t thr, vvp_code_t code);
|
||||
extern bool of_CVT_IR(vthread_t thr, vvp_code_t code);
|
||||
|
|
@ -175,6 +177,9 @@ extern vvp_code_t codespace_null(void);
|
|||
|
||||
/*
|
||||
* $Log: codes.h,v $
|
||||
* Revision 1.75 2005/09/14 02:50:07 steve
|
||||
* Add word integer compares.
|
||||
*
|
||||
* Revision 1.74 2005/06/14 01:44:09 steve
|
||||
* Add the assign_v0_d instruction.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||
*/
|
||||
#ifdef HAVE_CVS_IDENT
|
||||
#ident "$Id: compile.cc,v 1.210 2005/07/06 04:29:25 steve Exp $"
|
||||
#ident "$Id: compile.cc,v 1.211 2005/09/14 02:50:07 steve Exp $"
|
||||
#endif
|
||||
|
||||
# include "arith.h"
|
||||
|
|
@ -101,6 +101,8 @@ const static struct opcode_table_s opcode_table[] = {
|
|||
{ "%cmp/s", of_CMPS, 3, {OA_BIT1, OA_BIT2, OA_NUMBER} },
|
||||
{ "%cmp/u", of_CMPU, 3, {OA_BIT1, OA_BIT2, OA_NUMBER} },
|
||||
{ "%cmp/wr", of_CMPWR, 2, {OA_BIT1, OA_BIT2, OA_NONE} },
|
||||
{ "%cmp/ws", of_CMPWS, 2, {OA_BIT1, OA_BIT2, OA_NONE} },
|
||||
{ "%cmp/wu", of_CMPWU, 2, {OA_BIT1, OA_BIT2, OA_NONE} },
|
||||
{ "%cmp/x", of_CMPX, 3, {OA_BIT1, OA_BIT2, OA_NUMBER} },
|
||||
{ "%cmp/z", of_CMPZ, 3, {OA_BIT1, OA_BIT2, OA_NUMBER} },
|
||||
{ "%cmpi/u", of_CMPIU, 3, {OA_BIT1, OA_BIT2, OA_NUMBER} },
|
||||
|
|
@ -1478,6 +1480,9 @@ void compile_param_string(char*label, char*name, char*str, char*value)
|
|||
|
||||
/*
|
||||
* $Log: compile.cc,v $
|
||||
* Revision 1.211 2005/09/14 02:50:07 steve
|
||||
* Add word integer compares.
|
||||
*
|
||||
* Revision 1.210 2005/07/06 04:29:25 steve
|
||||
* Implement real valued signals and arith nodes.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||
*/
|
||||
#ifdef HAVE_CVS_IDENT
|
||||
#ident "$Id: config.h.in,v 1.19 2005/04/13 06:34:20 steve Exp $"
|
||||
#ident "$Id: config.h.in,v 1.20 2005/09/14 02:50:07 steve Exp $"
|
||||
#endif
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
|
@ -61,6 +61,8 @@
|
|||
# define MODULE_DIR "."
|
||||
#endif
|
||||
|
||||
# include <stdint.h>
|
||||
|
||||
#if SIZEOF_UNSIGNED >= 8
|
||||
typedef unsigned vvp_time64_t;
|
||||
# define TIME_FMT ""
|
||||
|
|
@ -105,6 +107,9 @@ typedef unsigned long vvp_time64_t;
|
|||
|
||||
/*
|
||||
* $Log: config.h.in,v $
|
||||
* Revision 1.20 2005/09/14 02:50:07 steve
|
||||
* Add word integer compares.
|
||||
*
|
||||
* Revision 1.19 2005/04/13 06:34:20 steve
|
||||
* Add vvp driver functor for logic outputs,
|
||||
* Add ostream output operators for debugging.
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Copyright (c) 2001-2003 Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* $Id: opcodes.txt,v 1.65 2005/06/14 01:44:10 steve Exp $
|
||||
* $Id: opcodes.txt,v 1.66 2005/09/14 02:50:07 steve Exp $
|
||||
*/
|
||||
|
||||
|
||||
|
|
@ -184,6 +184,10 @@ bit gets the x value.
|
|||
|
||||
[compare real values.]
|
||||
|
||||
* %cmp/ws <bit-l>, <bit-r>
|
||||
* %cmp/wu <bit-l>, <bit-r>
|
||||
|
||||
[compare signed/unsigned integer words.]
|
||||
|
||||
* %cmp/z <bit-l>, <bit-r>, <wid>
|
||||
* %cmp/x <bit-l>, <bit-r>, <wid>
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||
*/
|
||||
#ifdef HAVE_CVS_IDENT
|
||||
#ident "$Id: vthread.cc,v 1.145 2005/08/30 00:49:21 steve Exp $"
|
||||
#ident "$Id: vthread.cc,v 1.146 2005/09/14 02:50:07 steve Exp $"
|
||||
#endif
|
||||
|
||||
# include "config.h"
|
||||
|
|
@ -100,8 +100,9 @@ struct vthread_s {
|
|||
|
||||
/* These are the word registers. */
|
||||
union {
|
||||
long w_int;
|
||||
double w_real;
|
||||
int64_t w_int;
|
||||
uint64_t w_uint;
|
||||
double w_real;
|
||||
} words[16];
|
||||
|
||||
/* My parent sets this when it wants me to wake it up. */
|
||||
|
|
@ -508,7 +509,6 @@ bool of_ASSIGN_V0(vthread_t thr, vvp_code_t cp)
|
|||
{
|
||||
unsigned wid = thr->words[0].w_int;
|
||||
assert(wid > 0);
|
||||
|
||||
unsigned delay = cp->bit_idx[0];
|
||||
unsigned bit = cp->bit_idx[1];
|
||||
|
||||
|
|
@ -921,6 +921,34 @@ bool of_CMPWR(vthread_t thr, vvp_code_t cp)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool of_CMPWS(vthread_t thr, vvp_code_t cp)
|
||||
{
|
||||
int64_t l = thr->words[cp->bit_idx[0]].w_int;
|
||||
int64_t r = thr->words[cp->bit_idx[1]].w_int;
|
||||
|
||||
vvp_bit4_t eq = (l == r)? BIT4_1 : BIT4_0;
|
||||
vvp_bit4_t lt = (l < r)? BIT4_1 : BIT4_0;
|
||||
|
||||
thr_put_bit(thr, 4, eq);
|
||||
thr_put_bit(thr, 5, lt);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool of_CMPWU(vthread_t thr, vvp_code_t cp)
|
||||
{
|
||||
uint64_t l = thr->words[cp->bit_idx[0]].w_uint;
|
||||
uint64_t r = thr->words[cp->bit_idx[1]].w_uint;
|
||||
|
||||
vvp_bit4_t eq = (l == r)? BIT4_1 : BIT4_0;
|
||||
vvp_bit4_t lt = (l < r)? BIT4_1 : BIT4_0;
|
||||
|
||||
thr_put_bit(thr, 4, eq);
|
||||
thr_put_bit(thr, 5, lt);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool of_CMPZ(vthread_t thr, vvp_code_t cp)
|
||||
{
|
||||
vvp_bit4_t eq = BIT4_1;
|
||||
|
|
@ -3147,6 +3175,9 @@ bool of_JOIN_UFUNC(vthread_t thr, vvp_code_t cp)
|
|||
|
||||
/*
|
||||
* $Log: vthread.cc,v $
|
||||
* Revision 1.146 2005/09/14 02:50:07 steve
|
||||
* Add word integer compares.
|
||||
*
|
||||
* Revision 1.145 2005/08/30 00:49:21 steve
|
||||
* minor correction to address check in of_MOV1XZ
|
||||
*
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Copyright (c) 2001 Stephen Williams (steve@icarus.com)
|
||||
*
|
||||
* $Id: vthread.txt,v 1.4 2003/02/09 23:33:26 steve Exp $
|
||||
* $Id: vthread.txt,v 1.5 2005/09/14 02:50:07 steve Exp $
|
||||
*/
|
||||
|
||||
|
||||
|
|
@ -40,13 +40,13 @@ The remaining 64K-8 possible <bit> values are read-write bit registers
|
|||
that can be accessed singly or as vectors. This obviously implies that
|
||||
a bit address is 16 bits.
|
||||
|
||||
Threads also contain 4 numeric ``index'' registers. These are binary
|
||||
values (no unknowns) that can be used in certain cases where extra
|
||||
numeric parameters are needed. The thread instruction set includes
|
||||
Threads alco contait 16 numeric registers. These registers can hold a
|
||||
real value or a 64bit integer, and can be used in certain cases where
|
||||
numeric values are needed. The thread instruction set includes
|
||||
%ix/* instructions to manipulate these registers. The instructions
|
||||
that use these registers document which register is used, and what the
|
||||
numeric value is used for. For example, %assign/m uses index register
|
||||
3 to select the memory bit to target its bit.
|
||||
numeric value is used for. Registers 0-3 are often given fixed
|
||||
meanings to instructions that need an integer value.
|
||||
|
||||
/*
|
||||
* Copyright (c) 2001 Stephen Williams (steve@icarus.com)
|
||||
|
|
|
|||
Loading…
Reference in New Issue