⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dynamicarmcode.h

📁 鼎鼎有名的手机mpeg4播放器smart movie-智能影院 解码内核
💻 H
📖 第 1 页 / 共 3 页
字号:
   inline void WstrdPreAdvance(E_WMMX_REGISTER src, E_REGISTER dst, int offs){ I2C(WSTRD_PRE, src, dst, offs); }

   inline void Wand(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WAND, dst, src1, src2); }
   inline void Wandn(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WANDN, dst, src1, src2); }
   inline void Wor(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WOR, dst, src1, src2); }
   inline void Wxor(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WXOR, dst, src1, src2); }
//----------------------------
// Extract a 64-bit value from the two 64-bit Source registers, and place the result in 'dst'; instruction uses a 3-bit value stored in the specified general register to specify the byte offset of the value to extract.
   inline void Walignr(int ri, E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(!ri ? WALIGNR0 : ri==1 ? WALIGNR1 : ri==2 ? WALIGNR2 : WALIGNR3, dst, src1, src2); }
//----------------------------
   inline void Waddb(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WADDB, dst, src1, src2); }
   inline void Waddh(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WADDH, dst, src1, src2); }
   inline void Waddw(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WADDW, dst, src1, src2); }
   inline void Waddbus(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WADDBUS, dst, src1, src2); }
   inline void Waddhus(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WADDHUS, dst, src1, src2); }
   inline void Waddwus(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WADDWUS, dst, src1, src2); }
   inline void Waddbss(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WADDBSS, dst, src1, src2); }
   inline void Waddhss(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WADDHSS, dst, src1, src2); }
   inline void Waddwss(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WADDWSS, dst, src1, src2); }

   inline void Wsubb(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WSUBB, dst, src1, src2); }
   inline void Wsubh(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WSUBH, dst, src1, src2); }
   inline void Wsubw(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WSUBW, dst, src1, src2); }
   inline void Wsubbus(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WSUBBUS, dst, src1, src2); }
   inline void Wsubhus(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WSUBHUS, dst, src1, src2); }
   inline void Wsubwus(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WSUBWUS, dst, src1, src2); }
   inline void Wsubbss(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WSUBBSS, dst, src1, src2); }
   inline void Wsubhss(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WSUBHSS, dst, src1, src2); }
   inline void Wsubwss(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WSUBWSS, dst, src1, src2); }
//----------------------------
// Perform a 2-pixel average of wRn and wRm on unsigned vectors of 8- or 16-bit data with optional rounding of +1 and places the result in the 'dst'.
   inline void Wavg2b(bool round, E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(round ? WAVG2BR : WAVG2B, dst, src1, src2); }
   inline void Wavg2h(bool round, E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(round ? WAVG2HR : WAVG2H, dst, src1, src2); }
//----------------------------
// Perform vector rotate-right / shift-arithmetic-right / logical-shift-left / logical-shift-right
// of src by sh for vectors of 16-, 32-, or 64-bit data and places the result in 'dst'.
// Version with G uses general-purpose register.
   inline void Wrorh(E_WMMX_REGISTER dst, E_WMMX_REGISTER src, E_WMMX_REGISTER sh){ I3(WRORH, dst, src, sh); }
   inline void Wrorw(E_WMMX_REGISTER dst, E_WMMX_REGISTER src, E_WMMX_REGISTER sh){ I3(WRORW, dst, src, sh); }
   inline void Wrord(E_WMMX_REGISTER dst, E_WMMX_REGISTER src, E_WMMX_REGISTER sh){ I3(WRORD, dst, src, sh); }
   inline void Wrorhg(E_WMMX_REGISTER dst, E_WMMX_REGISTER src, E_WMMX_GENERAL_REGISTER sh){ I3(WRORHG, dst, src, sh); }
   inline void Wrorwg(E_WMMX_REGISTER dst, E_WMMX_REGISTER src, E_WMMX_GENERAL_REGISTER sh){ I3(WRORWG, dst, src, sh); }
   inline void Wrordg(E_WMMX_REGISTER dst, E_WMMX_REGISTER src, E_WMMX_GENERAL_REGISTER sh){ I3(WRORDG, dst, src, sh); }

   inline void Wsrah(E_WMMX_REGISTER dst, E_WMMX_REGISTER src, E_WMMX_REGISTER sh){ I3(WSRAH, dst, src, sh); }
   inline void Wsraw(E_WMMX_REGISTER dst, E_WMMX_REGISTER src, E_WMMX_REGISTER sh){ I3(WSRAW, dst, src, sh); }
   inline void Wsrad(E_WMMX_REGISTER dst, E_WMMX_REGISTER src, E_WMMX_REGISTER sh){ I3(WSRAD, dst, src, sh); }
   inline void Wsrahg(E_WMMX_REGISTER dst, E_WMMX_REGISTER src, E_WMMX_GENERAL_REGISTER sh){ I3(WSRAHG, dst, src, sh); }
   inline void Wsrawg(E_WMMX_REGISTER dst, E_WMMX_REGISTER src, E_WMMX_GENERAL_REGISTER sh){ I3(WSRAWG, dst, src, sh); }
   inline void Wsradg(E_WMMX_REGISTER dst, E_WMMX_REGISTER src, E_WMMX_GENERAL_REGISTER sh){ I3(WSRADG, dst, src, sh); }

   inline void Wsllh(E_WMMX_REGISTER dst, E_WMMX_REGISTER src, E_WMMX_REGISTER sh){ I3(WSLLH, dst, src, sh); }
   inline void Wsllw(E_WMMX_REGISTER dst, E_WMMX_REGISTER src, E_WMMX_REGISTER sh){ I3(WSLLW, dst, src, sh); }
   inline void Wslld(E_WMMX_REGISTER dst, E_WMMX_REGISTER src, E_WMMX_REGISTER sh){ I3(WSLLD, dst, src, sh); }
   inline void Wsllhg(E_WMMX_REGISTER dst, E_WMMX_REGISTER src, E_WMMX_GENERAL_REGISTER sh){ I3(WSLLHG, dst, src, sh); }
   inline void Wsllwg(E_WMMX_REGISTER dst, E_WMMX_REGISTER src, E_WMMX_GENERAL_REGISTER sh){ I3(WSLLWG, dst, src, sh); }
   inline void Wslldg(E_WMMX_REGISTER dst, E_WMMX_REGISTER src, E_WMMX_GENERAL_REGISTER sh){ I3(WSLLDG, dst, src, sh); }

   inline void Wsrlh(E_WMMX_REGISTER dst, E_WMMX_REGISTER src, E_WMMX_REGISTER sh){ I3(WSRLH, dst, src, sh); }
   inline void Wsrlw(E_WMMX_REGISTER dst, E_WMMX_REGISTER src, E_WMMX_REGISTER sh){ I3(WSRLW, dst, src, sh); }
   inline void Wsrld(E_WMMX_REGISTER dst, E_WMMX_REGISTER src, E_WMMX_REGISTER sh){ I3(WSRLD, dst, src, sh); }
   inline void Wsrlhg(E_WMMX_REGISTER dst, E_WMMX_REGISTER src, E_WMMX_GENERAL_REGISTER sh){ I3(WSRLHG, dst, src, sh); }
   inline void Wsrlwg(E_WMMX_REGISTER dst, E_WMMX_REGISTER src, E_WMMX_GENERAL_REGISTER sh){ I3(WSRLWG, dst, src, sh); }
   inline void Wsrldg(E_WMMX_REGISTER dst, E_WMMX_REGISTER src, E_WMMX_GENERAL_REGISTER sh){ I3(WSRLDG, dst, src, sh); }

//----------------------------
// Select (shuffle) 16-bit data values in dst register from 16-bit fields in src register specified by the 8-bit immediate value.
// The 8-bit constant specifies 2 bits per half-word, which specify index in source register (0-3) from where data are taken.
   inline void Wshufh(E_WMMX_REGISTER dst, E_WMMX_REGISTER src, byte c){ I2C(WSHUFH, dst, src, c); }
//----------------------------
// Performs a vector multiplication of src1 and src2 on vectors of 16-bit data only.
// M-qualifier indicates that the higher 16 bits of the result are to be stored in dst.
// L-qualifier indicates that the lower 16 bits of the result are to be stored in dst.
// Can be performed on signed or unsigned data.
   inline void Wmulul(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WMULUL, dst, src1, src2); }
   inline void Wmulum(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WMULUM, dst, src1, src2); }
   inline void Wmulsl(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WMULSL, dst, src1, src2); }
   inline void Wmulsm(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WMULSM, dst, src1, src2); }
//----------------------------
// Unpacks 8-bit, 16-bit, or 32-bit data from the higher/lower half of src, and either zero or signed extend each field, and place the result into dst.
   inline void Wunpckehub(E_WMMX_REGISTER dst, E_WMMX_REGISTER src){ I2(WUNPCKEHUB, dst, src); }
   inline void Wunpckehuh(E_WMMX_REGISTER dst, E_WMMX_REGISTER src){ I2(WUNPCKEHUH, dst, src); }
   inline void Wunpckehuw(E_WMMX_REGISTER dst, E_WMMX_REGISTER src){ I2(WUNPCKEHUW, dst, src); }
   inline void Wunpckehsb(E_WMMX_REGISTER dst, E_WMMX_REGISTER src){ I2(WUNPCKEHSB, dst, src); }
   inline void Wunpckehsh(E_WMMX_REGISTER dst, E_WMMX_REGISTER src){ I2(WUNPCKEHSH, dst, src); }
   inline void Wunpckehsw(E_WMMX_REGISTER dst, E_WMMX_REGISTER src){ I2(WUNPCKEHSW, dst, src); }

   inline void Wunpckelub(E_WMMX_REGISTER dst, E_WMMX_REGISTER src){ I2(WUNPCKELUB, dst, src); }
   inline void Wunpckeluh(E_WMMX_REGISTER dst, E_WMMX_REGISTER src){ I2(WUNPCKELUH, dst, src); }
   inline void Wunpckeluw(E_WMMX_REGISTER dst, E_WMMX_REGISTER src){ I2(WUNPCKELUW, dst, src); }
   inline void Wunpckelsb(E_WMMX_REGISTER dst, E_WMMX_REGISTER src){ I2(WUNPCKELSB, dst, src); }
   inline void Wunpckelsh(E_WMMX_REGISTER dst, E_WMMX_REGISTER src){ I2(WUNPCKELSH, dst, src); }
   inline void Wunpckelsw(E_WMMX_REGISTER dst, E_WMMX_REGISTER src){ I2(WUNPCKELSW, dst, src); }
//----------------------------
// Interleave and merge eight bytes, four 16-bit halfwords, words, or two 32-bit words.
// Unpacks either 8-bit, 16-bit, or 32 bit data from the higher/lower half of src1, interleaves with the higher/lower half of src2, and place the result into dst.
   inline void Wunpckihb(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WUNPCKIHB, dst, src1, src2); }
   inline void Wunpckihh(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WUNPCKIHH, dst, src1, src2); }
   inline void Wunpckihw(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WUNPCKIHW, dst, src1, src2); }

   inline void Wunpckilb(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WUNPCKILB, dst, src1, src2); }
   inline void Wunpckilh(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WUNPCKILH, dst, src1, src2); }
   inline void Wunpckilw(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WUNPCKILW, dst, src1, src2); }
//----------------------------
// Pack data from src1 and src2 into dst, with src1 packed into the lower half, and src2 into the upper half, for vectors of 16-, 32-, or 64-bit data,
// and saturate the results and place in the dst.
// Packing can be performed with signed saturation or unsigned saturation.
   inline void Wpackhus(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WPACKHUS, dst, src1, src2); }
   inline void Wpackwus(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WPACKWUS, dst, src1, src2); }
   inline void Wpackdus(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WPACKDUS, dst, src1, src2); }

   inline void Wpackhss(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WPACKHSS, dst, src1, src2); }
   inline void Wpackwss(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WPACKWSS, dst, src1, src2); }
   inline void Wpackdss(E_WMMX_REGISTER dst, E_WMMX_REGISTER src1, E_WMMX_REGISTER src2){ I3(WPACKDSS, dst, src1, src2); }
//----------------------------
   /*
      WACCB
      WACCH
      WACCW
      WALIGNI
      WAVG2B
      WAVG2H
      WAVG2BR 
      WAVG2HR 
      WCMPEQB 
      WCMPEQH 
      WCMPEQW 
      WCMPGTUB
      WCMPGTUH
      WCMPGTUW
      WCMPGTSB
      WCMPGTSH
      WCMPGTSW
      WLDRB_PRESUB 
      WLDRH_PRESUB 
      WLDRW_PRESUB 
      WLDRD_PRESUB 
      WSTRB_PRESUB 
      WSTRH_PRESUB 
      WSTRW_PRESUB 
      WSTRD_PRESUB 
      WLDRB_POSTSUB
      WLDRH_POSTSUB
      WLDRW_POSTSUB
      WLDRD_POSTSUB
      WSTRB_POSTSUB
      WSTRH_POSTSUB
      WSTRW_POSTSUB
      WSTRD_POSTSUB
      WMACU 
      WMACS 
      WMACUZ
      WMACSZ
      WMADDU
      WMADDS
      WMAXUB
      WMAXUH
      WMAXUW
      WMAXSB
      WMAXSH
      WMAXSW
      WMINUB
      WMINUH
      WMINUW
      WMINSB
      WMINSH
      WMINSW
      WSADB 
      WSADBZ
      WSADH 
      WSADHZ
   */

//----------------------------
// Instruction modifications for next instruction:
   virtual void Byte() = 0;            //instruction operates on byte
   virtual void Half() = 0;            //    '' word
   virtual void SByte() = 0;           //    '' signed char
   virtual void SHalf() = 0;           //    '' signed short
   virtual void Cond(E_CONDITION) = 0; //conditional instruction
   virtual void Set() = 0;             //set flags from result
   virtual void MoveBack() = 0;        //move next instruction back while register dependency allows it

//----------------------------
// Create label and optionally put to code.
// Labels not put to code during creation are forward-references, and must be put by using PutLabel.
   virtual void *Label(bool put = true) = 0;

//----------------------------
// Put label to code.
   virtual void PutLabel(void *label) = 0;

//----------------------------
// Declare constant data stored in code. Returned is label for referencing. Use PutLabel to actually instantiate data (at end of function).
   virtual void *DeclareData(void *data, dword data_size) = 0;
   inline void *DeclareData(dword data){ return DeclareData(&data, 4); }
   virtual void StoreLabelAddress(void *label) = 0;

//----------------------------
// Build code.
   virtual void CodeBuild() = 0;

//----------------------------
// Get pointer to function compiled code.
   virtual void *Code(dword fnc_index = 0) const = 0;

//----------------------------
   enum{
      CPU_WIRELESS_MMX = 1,
      CPU_ARM5T = 2,
   };
   static dword GetCpuCaps();

//----------------------------
// Create instance of this class.
   static C_dyn_code *Create();
};

//----------------------------

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -