提交 bab1cea3 编写于 作者: 饶先宏's avatar 饶先宏

202105301915

上级 342a18da
......@@ -32,6 +32,7 @@
/*
* bignumber.h
202105201110: rxh, initial version
202105260952: rxh, 调整了接口,主要是增加了带符号的计算,另外根据verilog的运算增加了运算符号
*/
#ifndef __BIGNUMBER_H
......@@ -84,24 +85,28 @@ typedef struct sIBigNumber {
int (*MulInt32)(HOBJECT object, HOBJECT src, int value);
int (*DivInt32)(HOBJECT object, HOBJECT src, int value);
int (*ModInt32)(HOBJECT object, HOBJECT src, int value);
int (*PowInt32)(HOBJECT object, HOBJECT src, int value);
int (*AddUint32)(HOBJECT object, HOBJECT src, unsigned int value);
int (*SubUint32)(HOBJECT object, HOBJECT src, unsigned int value);
int (*MulUint32)(HOBJECT object, HOBJECT src, unsigned int value);
int (*DivUint32)(HOBJECT object, HOBJECT src, unsigned int value);
int (*ModUint32)(HOBJECT object, HOBJECT src, unsigned int value);
int (*PowUint32)(HOBJECT object, HOBJECT src, unsigned int value);
int (*Add)(HOBJECT object, HOBJECT src0, HOBJECT src1);
int (*Sub)(HOBJECT object, HOBJECT src0, HOBJECT src1);
int (*Mul)(HOBJECT object, HOBJECT src0, HOBJECT src1);
int (*Div)(HOBJECT object, HOBJECT src0, HOBJECT src1);
int (*Mod)(HOBJECT object, HOBJECT src0, HOBJECT src1);
int (*Pow)(HOBJECT object, HOBJECT src0, HOBJECT src1);
int (*AddU)(HOBJECT object, HOBJECT src0, HOBJECT src1);
int (*SubU)(HOBJECT object, HOBJECT src0, HOBJECT src1);
int (*MulU)(HOBJECT object, HOBJECT src0, HOBJECT src1);
int (*DivU)(HOBJECT object, HOBJECT src0, HOBJECT src1);
int (*ModU)(HOBJECT object, HOBJECT src0, HOBJECT src1);
int (*PowU)(HOBJECT object, HOBJECT src0, HOBJECT src1);
int (*Neg)(HOBJECT object, HOBJECT src);
int (*Abs)(HOBJECT object, HOBJECT src);
......@@ -178,21 +183,25 @@ typedef struct sIBigNumber {
static int _obj##_bn_MulInt32(HOBJECT object, HOBJECT src, int value); \
static int _obj##_bn_DivInt32(HOBJECT object, HOBJECT src, int value); \
static int _obj##_bn_ModInt32(HOBJECT object, HOBJECT src, int value); \
static int _obj##_bn_PowInt32(HOBJECT object, HOBJECT src, int value); \
static int _obj##_bn_AddUint32(HOBJECT object, HOBJECT src, unsigned int value); \
static int _obj##_bn_SubUint32(HOBJECT object, HOBJECT src, unsigned int value); \
static int _obj##_bn_MulUint32(HOBJECT object, HOBJECT src, unsigned int value); \
static int _obj##_bn_DivUint32(HOBJECT object, HOBJECT src, unsigned int value); \
static int _obj##_bn_ModUint32(HOBJECT object, HOBJECT src, unsigned int value); \
static int _obj##_bn_PowUint32(HOBJECT object, HOBJECT src, unsigned int value); \
static int _obj##_bn_Add(HOBJECT object, HOBJECT src0, HOBJECT src1); \
static int _obj##_bn_Sub(HOBJECT object, HOBJECT src0, HOBJECT src1); \
static int _obj##_bn_Mul(HOBJECT object, HOBJECT src0, HOBJECT src1); \
static int _obj##_bn_Div(HOBJECT object, HOBJECT src0, HOBJECT src1); \
static int _obj##_bn_Mod(HOBJECT object, HOBJECT src0, HOBJECT src1); \
static int _obj##_bn_Pow(HOBJECT object, HOBJECT src0, HOBJECT src1); \
static int _obj##_bn_AddU(HOBJECT object, HOBJECT src0, HOBJECT src1); \
static int _obj##_bn_SubU(HOBJECT object, HOBJECT src0, HOBJECT src1); \
static int _obj##_bn_MulU(HOBJECT object, HOBJECT src0, HOBJECT src1); \
static int _obj##_bn_DivU(HOBJECT object, HOBJECT src0, HOBJECT src1); \
static int _obj##_bn_ModU(HOBJECT object, HOBJECT src0, HOBJECT src1); \
static int _obj##_bn_PowU(HOBJECT object, HOBJECT src0, HOBJECT src1); \
static int _obj##_bn_Neg(HOBJECT object, HOBJECT src); \
static int _obj##_bn_Abs(HOBJECT object, HOBJECT src); \
static int _obj##_bn_IsGT(HOBJECT object, HOBJECT src); \
......@@ -256,21 +265,25 @@ static const IBigNumber _obj##_bn_interface = { \
_obj##_bn_MulInt32, \
_obj##_bn_DivInt32, \
_obj##_bn_ModInt32, \
_obj##_bn_PowInt32, \
_obj##_bn_AddUint32, \
_obj##_bn_SubUint32, \
_obj##_bn_MulUint32, \
_obj##_bn_DivUint32, \
_obj##_bn_ModUint32, \
_obj##_bn_PowUint32, \
_obj##_bn_Add, \
_obj##_bn_Sub, \
_obj##_bn_Mul, \
_obj##_bn_Div, \
_obj##_bn_Mod, \
_obj##_bn_Pow, \
_obj##_bn_AddU, \
_obj##_bn_SubU, \
_obj##_bn_MulU, \
_obj##_bn_DivU, \
_obj##_bn_ModU, \
_obj##_bn_PowU, \
_obj##_bn_Neg, \
_obj##_bn_Abs, \
_obj##_bn_IsGT, \
......
......@@ -32,7 +32,7 @@
/*
* bignumber.c
202105201110: rxh, initial version
202105260952:修改了接口,为verilog语言编译做准备,主要是区分了带符号和不带符号计算
202105260952: rxh, 修改了接口,为verilog语言编译做准备,主要是区分了带符号和不带符号计算
*/
#include "stdlib.h"
......@@ -765,6 +765,16 @@ static int bigint_bn_ModInt32(HOBJECT object, HOBJECT src, int value)
return 0;
}
static int bigint_bn_PowInt32(HOBJECT object, HOBJECT src, int value)
{
IBigNumber** temp;
temp = bigintegerCreate(32);
bigint_bn_AssignInt32(temp, value);
bigint_bn_Pow(object, src, temp);
objectRelease(temp);
return 0;
}
static int bigint_bn_AddUint32(HOBJECT object, HOBJECT src, unsigned int value)
{
unsigned long long temp;
......@@ -833,6 +843,17 @@ static int bigint_bn_ModUint32(HOBJECT object, HOBJECT src, unsigned int value)
return 0;
}
static int bigint_bn_PowUint32(HOBJECT object, HOBJECT src, unsigned int value)
{
IBigNumber** temp;
temp = bigintegerCreate(32);
bigint_bn_AssignUint32(temp, value);
bigint_bn_PowU(object, src, temp);
objectRelease(temp);
return 0;
}
static int bigint_bn_AddFunc(HOBJECT object, HOBJECT src0, HOBJECT src1, int signexpand)
{
unsigned long long temp;
......@@ -991,6 +1012,14 @@ static int bigint_bn_Mod(HOBJECT object, HOBJECT src0, HOBJECT src1)
return 0;
}
static int bigint_bn_Pow(HOBJECT object, HOBJECT src0, HOBJECT src1)
{
sBigInteger* pobj;
pobj = (sBigInteger*)objectThis(object);
NOTIMPL;
return 0;
}
static int bigint_bn_AddU(HOBJECT object, HOBJECT src0, HOBJECT src1)
{
return bigint_bn_AddFunc(object, src0, src1, 0);
......@@ -1024,6 +1053,14 @@ static int bigint_bn_ModU(HOBJECT object, HOBJECT src0, HOBJECT src1)
return 0;
}
static int bigint_bn_PowU(HOBJECT object, HOBJECT src0, HOBJECT src1)
{
sBigInteger* pobj;
pobj = (sBigInteger*)objectThis(object);
NOTIMPL;
return 0;
}
static int bigint_bn_Neg(HOBJECT object, HOBJECT src)
{
/* 反码加一 */
......
......@@ -28,7 +28,7 @@
** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
** THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
修改记录:
202105140816: 根据git的要求增加License
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册