00001
00002
00003 #include "osl/misc/fastCopier.h"
00004 #include "osl/effect/numSimpleEffect.h"
00005 #include "osl/state/numEffectState.h"
00006 using namespace osl::effect;
00007 typedef long long v2di __attribute__ ((vector_size (16)));
00008
00009 inline void osl::misc::FastCopier::copy(NumSimpleEffectTable *dst, const NumSimpleEffectTable *src){
00010 dst->effected_mask = src->effected_mask;
00011 dst->mobilityTable = src->mobilityTable;
00012
00013 #if defined(i386) || defined(__x86_64)
00014 {
00015 v2di en0=*((v2di*)&(*src).effectedNumTable[0]);
00016 v2di en2=*((v2di*)&(*src).effectedNumTable[2]);
00017 v2di en4=*((v2di*)&(*src).effectedNumTable[4]);
00018 v2di en6=*((v2di*)&(*src).effectedNumTable[6]);
00019 v2di en8=*((v2di*)&(*src).effectedNumTable[8]);
00020 v2di en10=*((v2di*)&(*src).effectedNumTable[10]);
00021 v2di en12=*((v2di*)&(*src).effectedNumTable[12]);
00022 v2di en14=*((v2di*)&(*src).effectedNumTable[14]);
00023 v2di en16=*((v2di*)&(*src).effectedNumTable[16]);
00024 v2di en18=*((v2di*)&(*src).effectedNumTable[18]);
00025
00026 *((v2di*)&(*dst).effectedNumTable[0])=en0;
00027 *((v2di*)&(*dst).effectedNumTable[2])=en2;
00028 *((v2di*)&(*dst).effectedNumTable[4])=en4;
00029 *((v2di*)&(*dst).effectedNumTable[6])=en6;
00030 *((v2di*)&(*dst).effectedNumTable[8])=en8;
00031 *((v2di*)&(*dst).effectedNumTable[10])=en10;
00032 *((v2di*)&(*dst).effectedNumTable[12])=en12;
00033 *((v2di*)&(*dst).effectedNumTable[14])=en14;
00034 *((v2di*)&(*dst).effectedNumTable[16])=en16;
00035 *((v2di*)&(*dst).effectedNumTable[18])=en18;
00036
00037 v2di en20=*((v2di*)&(*src).effectedNumTable[20]);
00038 v2di en22=*((v2di*)&(*src).effectedNumTable[22]);
00039 v2di en24=*((v2di*)&(*src).effectedNumTable[24]);
00040 v2di en26=*((v2di*)&(*src).effectedNumTable[26]);
00041 v2di en28=*((v2di*)&(*src).effectedNumTable[28]);
00042 v2di en30=*((v2di*)&(*src).effectedNumTable[30]);
00043 v2di en32=*((v2di*)&(*src).effectedNumTable[32]);
00044 v2di en34=*((v2di*)&(*src).effectedNumTable[34]);
00045 v2di en36=*((v2di*)&(*src).effectedNumTable[36]);
00046 v2di en38=*((v2di*)&(*src).effectedNumTable[38]);
00047
00048 *((v2di*)&(*dst).effectedNumTable[20])=en20;
00049 *((v2di*)&(*dst).effectedNumTable[22])=en22;
00050 *((v2di*)&(*dst).effectedNumTable[24])=en24;
00051 *((v2di*)&(*dst).effectedNumTable[26])=en26;
00052 *((v2di*)&(*dst).effectedNumTable[28])=en28;
00053 *((v2di*)&(*dst).effectedNumTable[30])=en30;
00054 *((v2di*)&(*dst).effectedNumTable[32])=en32;
00055 *((v2di*)&(*dst).effectedNumTable[34])=en34;
00056 *((v2di*)&(*dst).effectedNumTable[36])=en36;
00057 *((v2di*)&(*dst).effectedNumTable[38])=en38;
00058 }
00059 #else
00060 for(int i=0;i<40;i++)
00061 (*dst).effectedNumTable[i]=(*src).effectNumTable[i];
00062 #endif
00063
00064 #if defined(i386) || defined(__x86_64)
00065 {
00066 v2di e18=*((v2di*)&(*src).effects[18]);
00067 v2di e20=*((v2di*)&(*src).effects[20]);
00068 v2di e22=*((v2di*)&(*src).effects[22]);
00069 v2di e24=*((v2di*)&(*src).effects[24]);
00070 v2di e26=*((v2di*)&(*src).effects[26]);
00071
00072 v2di e34=*((v2di*)&(*src).effects[34]);
00073 v2di e36=*((v2di*)&(*src).effects[36]);
00074 v2di e38=*((v2di*)&(*src).effects[38]);
00075 v2di e40=*((v2di*)&(*src).effects[40]);
00076 v2di e42=*((v2di*)&(*src).effects[42]);
00077
00078 *((v2di*)&(*dst).effects[18])=e18;
00079 *((v2di*)&(*dst).effects[20])=e20;
00080 *((v2di*)&(*dst).effects[22])=e22;
00081 *((v2di*)&(*dst).effects[24])=e24;
00082 *((v2di*)&(*dst).effects[26])=e26;
00083
00084 *((v2di*)&(*dst).effects[34])=e34;
00085 *((v2di*)&(*dst).effects[36])=e36;
00086 *((v2di*)&(*dst).effects[38])=e38;
00087 *((v2di*)&(*dst).effects[40])=e40;
00088 *((v2di*)&(*dst).effects[42])=e42;
00089
00090 v2di e50=*((v2di*)&(*src).effects[50]);
00091 v2di e52=*((v2di*)&(*src).effects[52]);
00092 v2di e54=*((v2di*)&(*src).effects[54]);
00093 v2di e56=*((v2di*)&(*src).effects[56]);
00094 v2di e58=*((v2di*)&(*src).effects[58]);
00095
00096 v2di e66=*((v2di*)&(*src).effects[66]);
00097 v2di e68=*((v2di*)&(*src).effects[68]);
00098 v2di e70=*((v2di*)&(*src).effects[70]);
00099 v2di e72=*((v2di*)&(*src).effects[72]);
00100 v2di e74=*((v2di*)&(*src).effects[74]);
00101
00102 *((v2di*)&(*dst).effects[50])=e50;
00103 *((v2di*)&(*dst).effects[52])=e52;
00104 *((v2di*)&(*dst).effects[54])=e54;
00105 *((v2di*)&(*dst).effects[56])=e56;
00106 *((v2di*)&(*dst).effects[58])=e58;
00107
00108 *((v2di*)&(*dst).effects[66])=e66;
00109 *((v2di*)&(*dst).effects[68])=e68;
00110 *((v2di*)&(*dst).effects[70])=e70;
00111 *((v2di*)&(*dst).effects[72])=e72;
00112 *((v2di*)&(*dst).effects[74])=e74;
00113
00114 v2di e82=*((v2di*)&(*src).effects[82]);
00115 v2di e84=*((v2di*)&(*src).effects[84]);
00116 v2di e86=*((v2di*)&(*src).effects[86]);
00117 v2di e88=*((v2di*)&(*src).effects[88]);
00118 v2di e90=*((v2di*)&(*src).effects[90]);
00119
00120 v2di e98=*((v2di*)&(*src).effects[98]);
00121 v2di e100=*((v2di*)&(*src).effects[100]);
00122 v2di e102=*((v2di*)&(*src).effects[102]);
00123 v2di e104=*((v2di*)&(*src).effects[104]);
00124 v2di e106=*((v2di*)&(*src).effects[106]);
00125
00126 *((v2di*)&(*dst).effects[82])=e82;
00127 *((v2di*)&(*dst).effects[84])=e84;
00128 *((v2di*)&(*dst).effects[86])=e86;
00129 *((v2di*)&(*dst).effects[88])=e88;
00130 *((v2di*)&(*dst).effects[90])=e90;
00131
00132 *((v2di*)&(*dst).effects[98])=e98;
00133 *((v2di*)&(*dst).effects[100])=e100;
00134 *((v2di*)&(*dst).effects[102])=e102;
00135 *((v2di*)&(*dst).effects[104])=e104;
00136 *((v2di*)&(*dst).effects[106])=e106;
00137
00138 v2di e114=*((v2di*)&(*src).effects[114]);
00139 v2di e116=*((v2di*)&(*src).effects[116]);
00140 v2di e118=*((v2di*)&(*src).effects[118]);
00141 v2di e120=*((v2di*)&(*src).effects[120]);
00142 v2di e122=*((v2di*)&(*src).effects[122]);
00143
00144 v2di e130=*((v2di*)&(*src).effects[130]);
00145 v2di e132=*((v2di*)&(*src).effects[132]);
00146 v2di e134=*((v2di*)&(*src).effects[134]);
00147 v2di e136=*((v2di*)&(*src).effects[136]);
00148 v2di e138=*((v2di*)&(*src).effects[138]);
00149
00150 *((v2di*)&(*dst).effects[114])=e114;
00151 *((v2di*)&(*dst).effects[116])=e116;
00152 *((v2di*)&(*dst).effects[118])=e118;
00153 *((v2di*)&(*dst).effects[120])=e120;
00154 *((v2di*)&(*dst).effects[122])=e122;
00155
00156 *((v2di*)&(*dst).effects[130])=e130;
00157 *((v2di*)&(*dst).effects[132])=e132;
00158 *((v2di*)&(*dst).effects[134])=e134;
00159 *((v2di*)&(*dst).effects[136])=e136;
00160 *((v2di*)&(*dst).effects[138])=e138;
00161
00162 v2di e146=*((v2di*)&(*src).effects[146]);
00163 v2di e148=*((v2di*)&(*src).effects[148]);
00164 v2di e150=*((v2di*)&(*src).effects[150]);
00165 v2di e152=*((v2di*)&(*src).effects[152]);
00166 v2di e154=*((v2di*)&(*src).effects[154]);
00167
00168 *((v2di*)&(*dst).effects[146])=e146;
00169 *((v2di*)&(*dst).effects[148])=e148;
00170 *((v2di*)&(*dst).effects[150])=e150;
00171 *((v2di*)&(*dst).effects[152])=e152;
00172 *((v2di*)&(*dst).effects[154])=e154;
00173 }
00174 #else
00175 for(int x=1;x<=9;x++)
00176 for(int y=1;y<=9;y++)
00177 (*dst).effects[Position(x,y).index()]=(*src).effects[Position(x,y).index()];
00178 #endif
00179 }
00180 void osl::misc::FastCopier::copy(NumEffectState *dst, const osl::state::NumEffectState *src){
00181
00182 (*dst).stand_mask=(*src).stand_mask;
00183 #if defined(i386) || defined(__x86_64)
00184 {
00185 v2di b16=*((v2di*)&(*src).board[16]);
00186 v2di b20=*((v2di*)&(*src).board[20]);
00187 v2di b24=*((v2di*)&(*src).board[24]);
00188 v2di b32=*((v2di*)&(*src).board[32]);
00189 v2di b36=*((v2di*)&(*src).board[36]);
00190 v2di b40=*((v2di*)&(*src).board[40]);
00191 v2di b48=*((v2di*)&(*src).board[48]);
00192 v2di b52=*((v2di*)&(*src).board[52]);
00193 v2di b56=*((v2di*)&(*src).board[56]);
00194
00195 *((v2di*)&(*dst).board[16])=b16;
00196 *((v2di*)&(*dst).board[20])=b20;
00197 *((v2di*)&(*dst).board[24])=b24;
00198 *((v2di*)&(*dst).board[32])=b32;
00199 *((v2di*)&(*dst).board[36])=b36;
00200 *((v2di*)&(*dst).board[40])=b40;
00201 *((v2di*)&(*dst).board[48])=b48;
00202 *((v2di*)&(*dst).board[52])=b52;
00203 *((v2di*)&(*dst).board[56])=b56;
00204
00205
00206 v2di b64=*((v2di*)&(*src).board[64]);
00207 v2di b68=*((v2di*)&(*src).board[68]);
00208 v2di b72=*((v2di*)&(*src).board[72]);
00209
00210 v2di b80=*((v2di*)&(*src).board[80]);
00211 v2di b84=*((v2di*)&(*src).board[84]);
00212 v2di b88=*((v2di*)&(*src).board[88]);
00213
00214 v2di b96=*((v2di*)&(*src).board[96]);
00215 v2di b100=*((v2di*)&(*src).board[100]);
00216 v2di b104=*((v2di*)&(*src).board[104]);
00217
00218
00219 *((v2di*)&(*dst).board[64])=b64;
00220 *((v2di*)&(*dst).board[68])=b68;
00221 *((v2di*)&(*dst).board[72])=b72;
00222
00223 *((v2di*)&(*dst).board[80])=b80;
00224 *((v2di*)&(*dst).board[84])=b84;
00225 *((v2di*)&(*dst).board[88])=b88;
00226
00227 *((v2di*)&(*dst).board[96])=b96;
00228 *((v2di*)&(*dst).board[100])=b100;
00229 *((v2di*)&(*dst).board[104])=b104;
00230
00231 v2di b112=*((v2di*)&(*src).board[112]);
00232 v2di b116=*((v2di*)&(*src).board[116]);
00233 v2di b120=*((v2di*)&(*src).board[120]);
00234
00235 v2di b128=*((v2di*)&(*src).board[128]);
00236 v2di b132=*((v2di*)&(*src).board[132]);
00237 v2di b136=*((v2di*)&(*src).board[136]);
00238
00239 v2di b144=*((v2di*)&(*src).board[144]);
00240 v2di b148=*((v2di*)&(*src).board[148]);
00241 v2di b152=*((v2di*)&(*src).board[152]);
00242
00243 *((v2di*)&(*dst).board[112])=b112;
00244 *((v2di*)&(*dst).board[116])=b116;
00245 *((v2di*)&(*dst).board[120])=b120;
00246
00247 *((v2di*)&(*dst).board[128])=b128;
00248 *((v2di*)&(*dst).board[132])=b132;
00249 *((v2di*)&(*dst).board[136])=b136;
00250
00251 *((v2di*)&(*dst).board[144])=b144;
00252 *((v2di*)&(*dst).board[148])=b148;
00253 *((v2di*)&(*dst).board[152])=b152;
00254
00255 v2di p0=*((v2di*)&(*src).pieces[0]);
00256 v2di p4=*((v2di*)&(*src).pieces[4]);
00257 v2di p8=*((v2di*)&(*src).pieces[8]);
00258 v2di p12=*((v2di*)&(*src).pieces[12]);
00259 v2di p16=*((v2di*)&(*src).pieces[16]);
00260 v2di p20=*((v2di*)&(*src).pieces[20]);
00261 v2di p24=*((v2di*)&(*src).pieces[24]);
00262 v2di p28=*((v2di*)&(*src).pieces[28]);
00263 v2di p32=*((v2di*)&(*src).pieces[32]);
00264 v2di p36=*((v2di*)&(*src).pieces[36]);
00265 *((v2di*)&(*dst).pieces[0])=p0;
00266 *((v2di*)&(*dst).pieces[4])=p4;
00267 *((v2di*)&(*dst).pieces[8])=p8;
00268 *((v2di*)&(*dst).pieces[12])=p12;
00269 *((v2di*)&(*dst).pieces[16])=p16;
00270 *((v2di*)&(*dst).pieces[20])=p20;
00271 *((v2di*)&(*dst).pieces[24])=p24;
00272 *((v2di*)&(*dst).pieces[28])=p28;
00273 *((v2di*)&(*dst).pieces[32])=p32;
00274 *((v2di*)&(*dst).pieces[36])=p36;
00275 }
00276 #else
00277 for(int x=1;x<=9;x++)
00278 for(int y=1;y<=9;y++)
00279 (*dst).board[Position(x,y).index()]=(*src).board[Position(x,y).index()];
00280 (*dst).pieces=(*src).pieces;
00281 #endif
00282 (*dst).pawnMask=(*src).pawnMask;
00283 dst->stand_count = src->stand_count;
00284 (*dst).turn=(*src).turn;
00285 copy(&((*dst).effects),&((*src).effects));
00286 (*dst).onBoardMask=(*src).onBoardMask;
00287 (*dst).promoted=(*src).promoted;
00288 (*dst).pin_or_open=(*src).pin_or_open;
00289 (*dst).king_mobility=(*src).king_mobility;
00290 (*dst).king8infos=(*src).king8infos;
00291 }
00292