00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef __WHIRL2F_H__
00037 #define __WHIRL2F_H__
00038
00039
00040
00041
00042
00043
00044
00045
00046 #define I4ASHR(v1, v2) \
00047 IOR(ISHFT(IAND('80000000'X, v1), -31)*ISHFT(-1, 32-v2), ISHFT(v1, -v2))
00048 #define I8ASHR(v1, v2) \
00049 IOR(ISHFT(IAND('8000000000000000'X, v1), -63_8)*ISHFT(-1, 64-v2), ISHFT(v1, -v2))
00050 #define U4ASHR(v1, v2) I4ASHR(v1, v2)
00051 #define U8ASHR(v1, v2) I8ASHR(v1, v2)
00052
00053
00054
00055
00056
00057 #define _I4SIGN(y) (2 * I4ASHR(y, 31) + 1)
00058 #define _I4MASK(x, y, v) IAND(I4ASHR(IEOR(x,y), 31), v)
00059 #define _I8SIGN(y) (2_8 * I8ASHR(y, 63) + 1_8)
00060 #define _I8MASK(x, y, v) IAND(I8ASHR(IEOR(x,y), 63), v)
00061
00062 #define INTRN_I4DIVFLOOR(v1, v2) \
00063 ((v1) + _I4MASK(v1, v2, _I4SIGN(v2) - (v2))) / (v2)
00064 #define INTRN_I8DIVFLOOR(v1, v2) \
00065 ((v1) + _I8MASK(v1, v2, _I8SIGN(v2) - (v2))) / (v2)
00066 #define INTRN_U4DIVFLOOR(v1, v2) I4DIVFLOOR(v1, v2)
00067 #define INTRN_U8DIVFLOOR(v1, v2) I8DIVFLOOR(v1, v2)
00068
00069 #define INTRN_I4DIVCEIL(v1, v2) -I4DIVFLOOR(-(v1), v2)
00070 #define INTRN_I8DIVCEIL(v1, v2) -I8DIVFLOOR(-(v1), v2)
00071 #define INTRN_U4DIVCEIL(v1, v2) ((v1)+(v2)-1)/(v2)
00072 #define INTRN_U8DIVCEIL(v1, v2) ((v1)+(v2)-1)/(v2)
00073
00074 #define INTRN_I4MODFLOOR(v1, v2) (v1 - v2*I4DIVFLOOR(v1, v2))
00075 #define INTRN_I8MODFLOOR(v1, v2) (v1 - v2*I8DIVFLOOR(v1, v2))
00076 #define INTRN_U4MODFLOOR(v1, v2) (v1 - v2*(v1/v2))
00077 #define INTRN_U8MODFLOOR(v1, v2) (v1 - v2*(v1/v2))
00078
00079 #define INTRN_I4MODCEIL(v1, v2) (v1 - v2*I4DIVCEIL(v1, v2))
00080 #define INTRN_I8MODCEIL(v1, v2) (v1 - v2*I8DIVCEIL(v1, v2))
00081 #define INTRN_U4MODCEIL(v1, v2) (v1 - v2*U4DIVCEIL(v1, v2))
00082 #define INTRN_U8MODCEIL(v1, v2) (v1 - v2*U8DIVCEIL(v1, v2))
00083
00084
00085
00086
00087 #define CEIL(v) '?????TODO(CEIL)?????'
00088 #define FLOOR(v) '?????TODO(FLOOR)?????'
00089
00090 #endif __WHIRL2F_H__