Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * All HWMC kernels
  3.  * Copyright © <2010>, Intel Corporation.
  4.  *
  5.  * Permission is hereby granted, free of charge, to any person obtaining a
  6.  * copy of this software and associated documentation files (the
  7.  * "Software"), to deal in the Software without restriction, including
  8.  * without limitation the rights to use, copy, modify, merge, publish,
  9.  * distribute, sub license, and/or sell copies of the Software, and to
  10.  * permit persons to whom the Software is furnished to do so, subject to
  11.  * the following conditions:
  12.  *
  13.  * The above copyright notice and this permission notice (including the
  14.  * next paragraph) shall be included in all copies or substantial portions
  15.  * of the Software.
  16.  *
  17.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  18.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  19.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  20.  * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
  21.  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  22.  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  23.  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  24.  *
  25.  * This file was originally licensed under the following license
  26.  *
  27.  *  Licensed under the Apache License, Version 2.0 (the "License");
  28.  *  you may not use this file except in compliance with the License.
  29.  *  You may obtain a copy of the License at
  30.  *
  31.  *      http://www.apache.org/licenses/LICENSE-2.0
  32.  *
  33.  *  Unless required by applicable law or agreed to in writing, software
  34.  *  distributed under the License is distributed on an "AS IS" BASIS,
  35.  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  36.  *  See the License for the specific language governing permissions and
  37.  *  limitations under the License.
  38.  *
  39.  */
  40.  
  41. // Kernel name: AllAVC.asm
  42. //
  43. // All HWMC kernels merged into this file
  44. //
  45. //  $Revision: 2 $
  46. //  $Date: 9/10/06 2:02a $
  47. //
  48.  
  49. // Note: To enable SW scoreboard for ILK AVC kernels, simply toggle the HW_SCOREBOARD
  50. //               and SW_SCOREBOARD definition as described below.
  51. //
  52. // ----------------------------------------------------
  53. //  Main: ALLINTRA
  54. // ----------------------------------------------------
  55.  
  56. #define COMBINED_KERNEL
  57. #define ENABLE_ILDB
  58.  
  59. //      WA for *Stim tool issue, should be removed later
  60.  
  61. #ifdef DEV_ILK
  62. #define INSTFACTOR      2       // 128-bit count as 2 instructions
  63. #else
  64. #define INSTFACTOR      1       // 128-bit is 1 instruction
  65. #endif  // DEV_ILK
  66.  
  67. #ifdef DEV_CTG
  68.   #define SW_SCOREBOARD         // SW Scoreboard should be enabled for CTG and earlier
  69.   #undef HW_SCOREBOARD          // HW Scoreboard should be disabled for CTG and earlier
  70. #else
  71.   #define HW_SCOREBOARD         // HW Scoreboard should be enabled for ILK and beyond
  72.   #undef SW_SCOREBOARD          // SW Scoreboard should be disabled for ILK and beyond
  73. #endif  // DEV_CTG
  74. #ifdef BOOTSTRAP
  75. #  ifdef ENABLE_ILDB
  76. #    define ALL_SPAWNED_UV_ILDB_FRAME_IP        0
  77. #    define SLEEP_ENTRY_UV_ILDB_FRAME_IP        0
  78. #    define POST_SLEEP_UV_ILDB_FRAME_IP         0
  79. #    define ALL_SPAWNED_Y_ILDB_FRAME_IP         0
  80. #    define SLEEP_ENTRY_Y_ILDB_FRAME_IP         0
  81. #    define POST_SLEEP_Y_ILDB_FRAME_IP          0
  82. #  endif
  83. #elif defined(DEV_ILK)
  84. # include "export.inc.gen5"
  85. #elif defined(DEV_CTG)
  86. # include "export.inc"
  87. #endif
  88. #if defined(_EXPORT)
  89.         #include "AllAVC_Export.inc"
  90. #elif defined(_BUILD)
  91.         #include "AllAVC.ich"                   // ISAasm dumped .exports
  92.         #include "AllAVC_Export.inc"    // Keep jumping targets aligned, only for CTG and beyond
  93.         #include "AllAVC_Build.inc"
  94. #else
  95. #endif
  96.  
  97. .kernel AllAVC
  98.  
  99. // Build all intra prediction kernels
  100. //
  101. #ifdef INTRA_16x16_PAD_NENOP
  102.     $for(0; <INTRA_16x16_PAD_NENOP; 1) {
  103.         nenop
  104.         }
  105. #endif
  106. #ifdef INTRA_16x16_PAD_NOP
  107.     $for(0; <INTRA_16x16_PAD_NOP; 1) {
  108.         nop
  109.         }
  110. #endif
  111.     #include "Intra_16x16.asm"
  112.  
  113. #ifdef INTRA_8x8_PAD_NENOP
  114.     $for(0; <INTRA_8x8_PAD_NENOP; 1) {
  115.         nenop
  116.         }
  117. #endif
  118. #ifdef INTRA_8x8_PAD_NOP
  119.     $for(0; <INTRA_8x8_PAD_NOP; 1) {
  120.         nop
  121.         }
  122. #endif
  123.     #include "Intra_8x8.asm"
  124.  
  125. #ifdef INTRA_4x4_PAD_NENOP
  126.     $for(0; <INTRA_4x4_PAD_NENOP; 1) {
  127.         nenop
  128.         }
  129. #endif
  130. #ifdef INTRA_4x4_PAD_NOP
  131.     $for(0; <INTRA_4x4_PAD_NOP; 1) {
  132.         nop
  133.         }
  134. #endif
  135.     #include "Intra_4x4.asm"
  136.  
  137. #ifdef INTRA_PCM_PAD_NENOP
  138.     $for(0; <INTRA_PCM_PAD_NENOP; 1) {
  139.         nenop
  140.         }
  141. #endif
  142. #ifdef INTRA_PCM_PAD_NOP
  143.     $for(0; <INTRA_PCM_PAD_NOP; 1) {
  144.         nop
  145.         }
  146. #endif
  147.     #include "Intra_PCM.asm"
  148.  
  149. // Build FrameMB_Motion kernel
  150. //
  151. #define FRAME
  152.  
  153.   #ifdef FRAME_MB_PAD_NENOP
  154.     $for(0; <FRAME_MB_PAD_NENOP; 1) {
  155.         nenop
  156.         }
  157.   #endif
  158.   #ifdef FRAME_MB_PAD_NOP
  159.     $for(0; <FRAME_MB_PAD_NOP; 1) {
  160.         nop
  161.         }
  162.   #endif
  163.     #include "AVCMCInter.asm"
  164. #undef  FRAME
  165.  
  166. // Build FieldMB_Motion kernel
  167. //
  168. #define FIELD
  169.  
  170.   #ifdef FIELD_MB_PAD_NENOP
  171.     $for(0; <FIELD_MB_PAD_NENOP; 1) {
  172.         nenop
  173.         }
  174.   #endif
  175.   #ifdef FIELD_MB_PAD_NOP
  176.     $for(0; <FIELD_MB_PAD_NOP; 1) {
  177.         nop
  178.         }
  179.   #endif
  180.     #include "AVCMCInter.asm"
  181. #undef  FIELD
  182.  
  183. // Build MBAff_Motion kernel
  184. //
  185. #define MBAFF
  186.  
  187.   #ifdef MBAFF_MB_PAD_NENOP
  188.     $for(0; <MBAFF_MB_PAD_NENOP; 1) {
  189.         nenop
  190.         }
  191.   #endif
  192.   #ifdef MBAFF_MB_PAD_NOP
  193.     $for(0; <MBAFF_MB_PAD_NOP; 1) {
  194.         nop
  195.         }
  196.   #endif
  197.     #include "AVCMCInter.asm"
  198. #undef  MBAFF
  199.  
  200. #ifdef SW_SCOREBOARD    
  201.  
  202. // SW scoreboard kernel for non-MBAFF
  203. //
  204. #ifdef SCOREBOARD_PAD_NENOP
  205.     $for(0; <SCOREBOARD_PAD_NENOP; 1) {
  206.         nenop
  207.         }
  208. #endif
  209. #ifdef SCOREBOARD_PAD_NOP
  210.     $for(0; <SCOREBOARD_PAD_NOP; 1) {
  211.         nop
  212.         }
  213. #endif
  214.     #include "scoreboard.asm"
  215.  
  216. //      SW scoreboard kernel for MBAFF
  217.  
  218. #ifdef SCOREBOARD_MBAFF_PAD_NENOP
  219.     $for(0; <SCOREBOARD_MBAFF_PAD_NENOP; 1) {
  220.         nenop
  221.         }
  222. #endif
  223. #ifdef SCOREBOARD_MBAFF_PAD_NOP
  224.     $for(0; <SCOREBOARD_MBAFF_PAD_NOP; 1) {
  225.         nop
  226.         }
  227. #endif
  228.     #include "scoreboard_MBAFF.asm"
  229.  
  230. #elif defined(HW_SCOREBOARD)
  231.  
  232. // SetHWscoreboard kernel for non-MBAFF
  233. //
  234. #ifdef SETHWSCOREBOARD_PAD_NENOP
  235.     $for(0; <SETHWSCOREBOARD_PAD_NENOP; 1) {
  236.         nenop
  237.         }
  238. #endif
  239. #ifdef SETHWSCOREBOARD_PAD_NOP
  240.     $for(0; <SETHWSCOREBOARD_PAD_NOP; 1) {
  241.         nop
  242.         }
  243. #endif
  244.     #include "SetHWScoreboard.asm"
  245.  
  246. //      SetHWscoreboard kernel for MBAFF
  247.  
  248. #ifdef SETHWSCOREBOARD_MBAFF_PAD_NENOP
  249.     $for(0; <SETHWSCOREBOARD_MBAFF_PAD_NENOP; 1) {
  250.         nenop
  251.         }
  252. #endif
  253. #ifdef SETHWSCOREBOARD_MBAFF_PAD_NOP
  254.     $for(0; <SETHWSCOREBOARD_MBAFF_PAD_NOP; 1) {
  255.         nop
  256.         }
  257. #endif
  258.     #include "SetHWScoreboard_MBAFF.asm"
  259.  
  260. #endif  // SW_SCOREBOARD
  261.  
  262. #ifdef BSDRESET_PAD_NENOP
  263.     $for(0; <BSDRESET_PAD_NENOP; 1) {
  264.         nenop
  265.         }
  266. #endif
  267. #ifdef BSDRESET_PAD_NOP
  268.     $for(0; <BSDRESET_PAD_NOP; 1) {
  269.         nop
  270.         }
  271. #endif
  272.     #include "BSDReset.asm"
  273.  
  274. #ifdef DCRESETDUMMY_PAD_NENOP
  275.     $for(0; <DCRESETDUMMY_PAD_NENOP; 1) {
  276.         nenop
  277.         }
  278. #endif
  279. #ifdef DCRESETDUMMY_PAD_NOP
  280.     $for(0; <DCRESETDUMMY_PAD_NOP; 1) {
  281.         nop
  282.         }
  283. #endif
  284.     #include "DCResetDummy.asm"
  285.  
  286. #ifdef ENABLE_ILDB
  287.  
  288. // Build all ILDB kernels
  289. //
  290. //      Undefine some previous defined symbols since they will be re-defined/re-declared in ILDB kernels
  291. #undef  A
  292. #undef  B
  293. #undef  p0
  294. #undef  p1
  295.  
  296. #define MSGPAYLOADB MSGPAYLOADB_ILDB
  297. #define MSGPAYLOADW MSGPAYLOADW_ILDB
  298. #define MSGPAYLOADD MSGPAYLOADD_ILDB
  299. #define MSGPAYLOADF MSGPAYLOADF_ILDB
  300.  
  301. //                              < Frame ILDB >
  302. #define _PROGRESSIVE
  303. #define ILDB_LABEL(x)   x##_ILDB_FRAME
  304. #ifdef AVC_ILDB_ROOT_Y_ILDB_FRAME_PAD_NENOP
  305.     $for(0; <AVC_ILDB_ROOT_Y_ILDB_FRAME_PAD_NENOP; 1) {
  306.         nenop
  307.         }
  308. #endif
  309. #ifdef AVC_ILDB_ROOT_Y_ILDB_FRAME_PAD_NOP
  310.     $for(0; <AVC_ILDB_ROOT_Y_ILDB_FRAME_PAD_NOP; 1) {
  311.         nop
  312.         }
  313. #endif
  314.     #include "AVC_ILDB_Root_Y.asm"
  315.  
  316. #ifdef AVC_ILDB_CHILD_Y_ILDB_FRAME_PAD_NENOP
  317.     $for(0; <AVC_ILDB_CHILD_Y_ILDB_FRAME_PAD_NENOP; 1) {
  318.         nenop
  319.         }
  320. #endif
  321. #ifdef AVC_ILDB_CHILD_Y_ILDB_FRAME_PAD_NOP
  322.     $for(0; <AVC_ILDB_CHILD_Y_ILDB_FRAME_PAD_NOP; 1) {
  323.         nop
  324.         }
  325. #endif
  326.     #include "AVC_ILDB_Child_Y.asm"
  327.  
  328. #ifdef AVC_ILDB_ROOT_UV_ILDB_FRAME_PAD_NENOP
  329.     $for(0; <AVC_ILDB_ROOT_UV_ILDB_FRAME_PAD_NENOP; 1) {
  330.         nenop
  331.         }
  332. #endif
  333. #ifdef AVC_ILDB_ROOT_UV_ILDB_FRAME_PAD_NOP
  334.     $for(0; <AVC_ILDB_ROOT_UV_ILDB_FRAME_PAD_NOP; 1) {
  335.         nop
  336.         }
  337. #endif
  338.     #include "AVC_ILDB_Root_UV.asm"
  339.  
  340. #ifdef AVC_ILDB_CHILD_UV_ILDB_FRAME_PAD_NENOP
  341.     $for(0; <AVC_ILDB_CHILD_UV_ILDB_FRAME_PAD_NENOP; 1) {
  342.         nenop
  343.         }
  344. #endif
  345. #ifdef AVC_ILDB_CHILD_UV_ILDB_FRAME_PAD_NOP
  346.     $for(0; <AVC_ILDB_CHILD_UV_ILDB_FRAME_PAD_NOP; 1) {
  347.         nop
  348.         }
  349. #endif
  350.     #include "AVC_ILDB_Child_UV.asm"
  351. #undef ILDB_LABEL
  352. #undef _PROGRESSIVE
  353.  
  354. //                              < Field ILDB >
  355. #define _FIELD
  356. #define ILDB_LABEL(x)   x##_ILDB_FIELD
  357. #ifdef AVC_ILDB_ROOT_Y_ILDB_FIELD_PAD_NENOP
  358.     $for(0; <AVC_ILDB_ROOT_Y_ILDB_FIELD_PAD_NENOP; 1) {
  359.         nenop
  360.         }
  361. #endif
  362. #ifdef AVC_ILDB_ROOT_Y_ILDB_FIELD_PAD_NOP
  363.     $for(0; <AVC_ILDB_ROOT_Y_ILDB_FIELD_PAD_NOP; 1) {
  364.         nop
  365.         }
  366. #endif
  367.     #include "AVC_ILDB_Root_Field_Y.asm"
  368.  
  369. #ifdef AVC_ILDB_CHILD_Y_ILDB_FIELD_PAD_NENOP
  370.     $for(0; <AVC_ILDB_CHILD_Y_ILDB_FIELD_PAD_NENOP; 1) {
  371.         nenop
  372.         }
  373. #endif
  374. #ifdef AVC_ILDB_CHILD_Y_ILDB_FIELD_PAD_NOP
  375.     $for(0; <AVC_ILDB_CHILD_Y_ILDB_FIELD_PAD_NOP; 1) {
  376.         nop
  377.         }
  378. #endif
  379.     #include "AVC_ILDB_Child_Field_Y.asm"
  380.  
  381. #ifdef AVC_ILDB_ROOT_UV_ILDB_FIELD_PAD_NENOP
  382.     $for(0; <AVC_ILDB_ROOT_UV_ILDB_FIELD_PAD_NENOP; 1) {
  383.         nenop
  384.         }
  385. #endif
  386. #ifdef AVC_ILDB_ROOT_UV_ILDB_FIELD_PAD_NOP
  387.     $for(0; <AVC_ILDB_ROOT_UV_ILDB_FIELD_PAD_NOP; 1) {
  388.         nop
  389.         }
  390. #endif
  391.     #include "AVC_ILDB_Root_Field_UV.asm"
  392.  
  393. #ifdef AVC_ILDB_CHILD_UV_ILDB_FIELD_PAD_NENOP
  394.     $for(0; <AVC_ILDB_CHILD_UV_ILDB_FIELD_PAD_NENOP; 1) {
  395.         nenop
  396.         }
  397. #endif
  398. #ifdef AVC_ILDB_CHILD_UV_ILDB_FIELD_PAD_NOP
  399.     $for(0; <AVC_ILDB_CHILD_UV_ILDB_FIELD_PAD_NOP; 1) {
  400.         nop
  401.         }
  402. #endif
  403.     #include "AVC_ILDB_Child_Field_UV.asm"
  404. #undef ILDB_LABEL
  405. #undef _FIELD
  406.  
  407. //                              < MBAFF Frame ILDB >
  408. #define _MBAFF
  409. #define ILDB_LABEL(x)   x##_ILDB_MBAFF
  410. #ifdef AVC_ILDB_ROOT_Y_ILDB_MBAFF_PAD_NENOP
  411.     $for(0; <AVC_ILDB_ROOT_Y_ILDB_MBAFF_PAD_NENOP; 1) {
  412.         nenop
  413.         }
  414. #endif
  415. #ifdef AVC_ILDB_ROOT_Y_ILDB_MBAFF_PAD_NOP
  416.     $for(0; <AVC_ILDB_ROOT_Y_ILDB_MBAFF_PAD_NOP; 1) {
  417.         nop
  418.         }
  419. #endif
  420.     #include "AVC_ILDB_Root_Mbaff_Y.asm"
  421.  
  422. #ifdef AVC_ILDB_CHILD_Y_ILDB_MBAFF_PAD_NENOP
  423.     $for(0; <AVC_ILDB_CHILD_Y_ILDB_MBAFF_PAD_NENOP; 1) {
  424.         nenop
  425.         }
  426. #endif
  427. #ifdef AVC_ILDB_CHILD_Y_ILDB_MBAFF_PAD_NOP
  428.     $for(0; <AVC_ILDB_CHILD_Y_ILDB_MBAFF_PAD_NOP; 1) {
  429.         nop
  430.         }
  431. #endif
  432.     #include "AVC_ILDB_Child_Mbaff_Y.asm"
  433.  
  434. #ifdef AVC_ILDB_ROOT_UV_ILDB_MBAFF_PAD_NENOP
  435.     $for(0; <AVC_ILDB_ROOT_UV_ILDB_MBAFF_PAD_NENOP; 1) {
  436.         nenop
  437.         }
  438. #endif
  439. #ifdef AVC_ILDB_ROOT_UV_ILDB_MBAFF_PAD_NOP
  440.     $for(0; <AVC_ILDB_ROOT_UV_ILDB_MBAFF_PAD_NOP; 1) {
  441.         nop
  442.         }
  443. #endif
  444.     #include "AVC_ILDB_Root_Mbaff_UV.asm"
  445.  
  446. #ifdef AVC_ILDB_CHILD_UV_ILDB_MBAFF_PAD_NENOP
  447.     $for(0; <AVC_ILDB_CHILD_UV_ILDB_MBAFF_PAD_NENOP; 1) {
  448.         nenop
  449.         }
  450. #endif
  451. #ifdef AVC_ILDB_CHILD_UV_ILDB_MBAFF_PAD_NOP
  452.     $for(0; <AVC_ILDB_CHILD_UV_ILDB_MBAFF_PAD_NOP; 1) {
  453.         nop
  454.         }
  455. #endif
  456.     #include "AVC_ILDB_Child_Mbaff_UV.asm"
  457. #undef ILDB_LABEL
  458. #undef _MBAFF
  459.  
  460. #endif          // ENABLE_ILDB
  461.  
  462. AllAVC_END:
  463. nop
  464. // End of AllAVC
  465.  
  466. .end_code
  467.  
  468. .end_kernel
  469.  
  470.