FreeCalypso > hg > gsm-codec-lib
diff libgsmhr1/mathhalf.h @ 500:66fb1fd032e6
libgsmhr1/mathhalf.[ch]: import original
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Wed, 19 Jun 2024 00:51:26 +0000 |
parents | |
children | 597b39aef484 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgsmhr1/mathhalf.h Wed Jun 19 00:51:26 2024 +0000 @@ -0,0 +1,97 @@ +#ifndef __MATHHALF +#define __MATHHALF + +#include "typedefs.h" + +/*_________________________________________________________________________ + | | + | Function Prototypes | + |_________________________________________________________________________| +*/ + +/* addition */ +/************/ + +Shortword add(Shortword var1, Shortword var2); /* 1 ops */ +Shortword sub(Shortword var1, Shortword var2); /* 1 ops */ +Longword L_add(Longword L_var1, Longword L_var2); /* 2 ops */ +Longword L_sub(Longword L_var1, Longword L_var2); /* 2 ops */ + +/* multiplication */ +/******************/ + +Shortword mult(Shortword var1, Shortword var2); /* 1 ops */ +Longword L_mult(Shortword var1, Shortword var2); /* 1 ops */ +Shortword mult_r(Shortword var1, Shortword var2); /* 2 ops */ + + +/* arithmetic shifts */ +/*********************/ + +Shortword shr(Shortword var1, Shortword var2); /* 1 ops */ +Shortword shl(Shortword var1, Shortword var2); /* 1 ops */ +Longword L_shr(Longword L_var1, Shortword var2); /* 2 ops */ +Longword L_shl(Longword L_var1, Shortword var2); /* 2 ops */ +Shortword shift_r(Shortword var, Shortword var2); /* 2 ops */ +Longword L_shift_r(Longword L_var, Shortword var2); /* 3 ops */ + +/* absolute value */ +/*******************/ + +Shortword abs_s(Shortword var1); /* 1 ops */ +Longword L_abs(Longword var1); /* 3 ops */ + + +/* multiply accumulate */ +/************************/ + +Longword L_mac(Longword L_var3, + Shortword var1, Shortword var2); /* 1 op */ +Shortword mac_r(Longword L_var3, + Shortword var1, Shortword var2); /* 2 op */ +Longword L_msu(Longword L_var3, + Shortword var1, Shortword var2); /* 1 op */ +Shortword msu_r(Longword L_var3, + Shortword var1, Shortword var2); /* 2 op */ + +/* negation */ +/*************/ + +Shortword negate(Shortword var1); /* 1 ops */ +Longword L_negate(Longword L_var1); /* 2 ops */ + + +/* Accumulator manipulation */ +/****************************/ + +Longword L_deposit_l(Shortword var1); /* 1 ops */ +Longword L_deposit_h(Shortword var1); /* 1 ops */ +Shortword extract_l(Longword L_var1); /* 1 ops */ +Shortword extract_h(Longword L_var1); /* 1 ops */ + +/* Round */ +/*********/ + +Shortword round(Longword L_var1); /* 1 ops */ + +/* Normalization */ +/*****************/ + +Shortword norm_l(Longword L_var1); /* 30 ops */ +Shortword norm_s(Shortword var1); /* 15 ops */ + +/* Division */ +/************/ +Shortword divide_s(Shortword var1, Shortword var2); /* 18 ops */ + +/* Non-saturating instructions */ +/*******************************/ +Longword L_add_c(Longword L_Var1, Longword L_Var2); /* 2 ops */ +Longword L_sub_c(Longword L_Var1, Longword L_Var2); /* 2 ops */ +Longword L_sat(Longword L_var1); /* 4 ops */ +Longword L_macNs(Longword L_var3, + Shortword var1, Shortword var2); /* 1 ops */ +Longword L_msuNs(Longword L_var3, + Shortword var1, Shortword var2); /* 1 ops */ + +#endif