Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:52

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /**
0004  * @file
0005  *
0006  * @ingroup ScoreSchedSmpEdfReqSetAffinity
0007  */
0008 
0009 /*
0010  * Copyright (C) 2021 embedded brains GmbH & Co. KG
0011  *
0012  * Redistribution and use in source and binary forms, with or without
0013  * modification, are permitted provided that the following conditions
0014  * are met:
0015  * 1. Redistributions of source code must retain the above copyright
0016  *    notice, this list of conditions and the following disclaimer.
0017  * 2. Redistributions in binary form must reproduce the above copyright
0018  *    notice, this list of conditions and the following disclaimer in the
0019  *    documentation and/or other materials provided with the distribution.
0020  *
0021  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0022  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0023  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0024  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0025  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0026  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0027  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0028  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0029  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0030  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0031  * POSSIBILITY OF SUCH DAMAGE.
0032  */
0033 
0034 /*
0035  * This file is part of the RTEMS quality process and was automatically
0036  * generated.  If you find something that needs to be fixed or
0037  * worded better please post a report or patch to an RTEMS mailing list
0038  * or raise a bug report:
0039  *
0040  * https://www.rtems.org/bugs.html
0041  *
0042  * For information on updating and regenerating please refer to the How-To
0043  * section in the Software Requirements Engineering chapter of the
0044  * RTEMS Software Engineering manual.  The manual is provided as a part of
0045  * a release.  For development sources please refer to the online
0046  * documentation at:
0047  *
0048  * https://docs.rtems.org
0049  */
0050 
0051 #ifdef HAVE_CONFIG_H
0052 #include "config.h"
0053 #endif
0054 
0055 #include <rtems.h>
0056 #include <rtems/score/percpu.h>
0057 #include <rtems/score/threaddispatch.h>
0058 #include <rtems/score/threadimpl.h>
0059 
0060 #include "tx-support.h"
0061 #include "tx-thread-queue.h"
0062 
0063 #include <rtems/test.h>
0064 
0065 /**
0066  * @defgroup ScoreSchedSmpEdfReqSetAffinity \
0067  *   spec:/score/sched/smp/edf/req/set-affinity
0068  *
0069  * @ingroup TestsuitesValidationSmpOnly0
0070  *
0071  * @{
0072  */
0073 
0074 typedef enum {
0075   ScoreSchedSmpEdfReqSetAffinity_Pre_Before_All,
0076   ScoreSchedSmpEdfReqSetAffinity_Pre_Before_X,
0077   ScoreSchedSmpEdfReqSetAffinity_Pre_Before_NA
0078 } ScoreSchedSmpEdfReqSetAffinity_Pre_Before;
0079 
0080 typedef enum {
0081   ScoreSchedSmpEdfReqSetAffinity_Pre_After_All,
0082   ScoreSchedSmpEdfReqSetAffinity_Pre_After_X,
0083   ScoreSchedSmpEdfReqSetAffinity_Pre_After_Y,
0084   ScoreSchedSmpEdfReqSetAffinity_Pre_After_NA
0085 } ScoreSchedSmpEdfReqSetAffinity_Pre_After;
0086 
0087 typedef enum {
0088   ScoreSchedSmpEdfReqSetAffinity_Pre_Priority_High,
0089   ScoreSchedSmpEdfReqSetAffinity_Pre_Priority_Low,
0090   ScoreSchedSmpEdfReqSetAffinity_Pre_Priority_NA
0091 } ScoreSchedSmpEdfReqSetAffinity_Pre_Priority;
0092 
0093 typedef enum {
0094   ScoreSchedSmpEdfReqSetAffinity_Pre_State_Ready,
0095   ScoreSchedSmpEdfReqSetAffinity_Pre_State_Blocked,
0096   ScoreSchedSmpEdfReqSetAffinity_Pre_State_NA
0097 } ScoreSchedSmpEdfReqSetAffinity_Pre_State;
0098 
0099 typedef enum {
0100   ScoreSchedSmpEdfReqSetAffinity_Pre_Sticky_Yes,
0101   ScoreSchedSmpEdfReqSetAffinity_Pre_Sticky_No,
0102   ScoreSchedSmpEdfReqSetAffinity_Pre_Sticky_NA
0103 } ScoreSchedSmpEdfReqSetAffinity_Pre_Sticky;
0104 
0105 typedef enum {
0106   ScoreSchedSmpEdfReqSetAffinity_Pre_Pinned_Yes,
0107   ScoreSchedSmpEdfReqSetAffinity_Pre_Pinned_No,
0108   ScoreSchedSmpEdfReqSetAffinity_Pre_Pinned_NA
0109 } ScoreSchedSmpEdfReqSetAffinity_Pre_Pinned;
0110 
0111 typedef enum {
0112   ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaPriority_High,
0113   ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaPriority_Low,
0114   ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaPriority_NA
0115 } ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaPriority;
0116 
0117 typedef enum {
0118   ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaAffinity_All,
0119   ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaAffinity_X,
0120   ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaAffinity_NA
0121 } ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaAffinity;
0122 
0123 typedef enum {
0124   ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaIdle_Yes,
0125   ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaIdle_No,
0126   ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaIdle_NA
0127 } ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaIdle;
0128 
0129 typedef enum {
0130   ScoreSchedSmpEdfReqSetAffinity_Pre_BetaPriority_High,
0131   ScoreSchedSmpEdfReqSetAffinity_Pre_BetaPriority_Low,
0132   ScoreSchedSmpEdfReqSetAffinity_Pre_BetaPriority_NA
0133 } ScoreSchedSmpEdfReqSetAffinity_Pre_BetaPriority;
0134 
0135 typedef enum {
0136   ScoreSchedSmpEdfReqSetAffinity_Pre_BetaAffinity_All,
0137   ScoreSchedSmpEdfReqSetAffinity_Pre_BetaAffinity_Y,
0138   ScoreSchedSmpEdfReqSetAffinity_Pre_BetaAffinity_NA
0139 } ScoreSchedSmpEdfReqSetAffinity_Pre_BetaAffinity;
0140 
0141 typedef enum {
0142   ScoreSchedSmpEdfReqSetAffinity_Pre_BetaIdle_Yes,
0143   ScoreSchedSmpEdfReqSetAffinity_Pre_BetaIdle_No,
0144   ScoreSchedSmpEdfReqSetAffinity_Pre_BetaIdle_NA
0145 } ScoreSchedSmpEdfReqSetAffinity_Pre_BetaIdle;
0146 
0147 typedef enum {
0148   ScoreSchedSmpEdfReqSetAffinity_Post_X_Task,
0149   ScoreSchedSmpEdfReqSetAffinity_Post_X_TaskIdle,
0150   ScoreSchedSmpEdfReqSetAffinity_Post_X_Alpha,
0151   ScoreSchedSmpEdfReqSetAffinity_Post_X_AlphaIdle,
0152   ScoreSchedSmpEdfReqSetAffinity_Post_X_Beta,
0153   ScoreSchedSmpEdfReqSetAffinity_Post_X_BetaIdle,
0154   ScoreSchedSmpEdfReqSetAffinity_Post_X_NA
0155 } ScoreSchedSmpEdfReqSetAffinity_Post_X;
0156 
0157 typedef enum {
0158   ScoreSchedSmpEdfReqSetAffinity_Post_Y_Task,
0159   ScoreSchedSmpEdfReqSetAffinity_Post_Y_TaskIdle,
0160   ScoreSchedSmpEdfReqSetAffinity_Post_Y_Alpha,
0161   ScoreSchedSmpEdfReqSetAffinity_Post_Y_AlphaIdle,
0162   ScoreSchedSmpEdfReqSetAffinity_Post_Y_Beta,
0163   ScoreSchedSmpEdfReqSetAffinity_Post_Y_BetaIdle,
0164   ScoreSchedSmpEdfReqSetAffinity_Post_Y_NA
0165 } ScoreSchedSmpEdfReqSetAffinity_Post_Y;
0166 
0167 typedef struct {
0168   uint32_t Skip : 1;
0169   uint32_t Pre_Before_NA : 1;
0170   uint32_t Pre_After_NA : 1;
0171   uint32_t Pre_Priority_NA : 1;
0172   uint32_t Pre_State_NA : 1;
0173   uint32_t Pre_Sticky_NA : 1;
0174   uint32_t Pre_Pinned_NA : 1;
0175   uint32_t Pre_AlphaPriority_NA : 1;
0176   uint32_t Pre_AlphaAffinity_NA : 1;
0177   uint32_t Pre_AlphaIdle_NA : 1;
0178   uint32_t Pre_BetaPriority_NA : 1;
0179   uint32_t Pre_BetaAffinity_NA : 1;
0180   uint32_t Pre_BetaIdle_NA : 1;
0181   uint32_t Post_X : 3;
0182   uint32_t Post_Y : 3;
0183 } ScoreSchedSmpEdfReqSetAffinity_Entry;
0184 
0185 /**
0186  * @brief Test context for spec:/score/sched/smp/edf/req/set-affinity test
0187  *   case.
0188  */
0189 typedef struct {
0190   /**
0191    * @brief This member contains the thread queue test context.
0192    */
0193   TQContext tq_ctx;
0194 
0195   /**
0196    * @brief This member specifies the task affinity before changing the
0197    *   affinity.
0198    */
0199   cpu_set_t task_affinity_before;
0200 
0201   /**
0202    * @brief This member specifies the task affinity after changing the
0203    *   affinity.
0204    */
0205   cpu_set_t task_affinity_after;
0206 
0207   /**
0208    * @brief This member specifies the priority of the task.
0209    */
0210   rtems_task_priority task_priority;
0211 
0212   /**
0213    * @brief If this member is true, then the task state shall be ready.
0214    */
0215   bool task_ready;
0216 
0217   /**
0218    * @brief If this member is true, then the task shall have obtained a sticky
0219    *   mutex.
0220    */
0221   bool task_sticky;
0222 
0223   /**
0224    * @brief If this member is true, then the task shall be pinned.
0225    */
0226   bool task_pinned;
0227 
0228   /**
0229    * @brief This member specifies the priority of the alpha task.
0230    */
0231   rtems_task_priority alpha_priority;
0232 
0233   /**
0234    * @brief This member specifies the affinity of the alpha task.
0235    */
0236   cpu_set_t alpha_affinity;
0237 
0238   /**
0239    * @brief If this member is true, then an idle task shall execute on behalf
0240    *   of the alpha task.
0241    */
0242   bool alpha_idle;
0243 
0244   /**
0245    * @brief This member specifies the priority of the beta task.
0246    */
0247   rtems_task_priority beta_priority;
0248 
0249   /**
0250    * @brief This member specifies the affinity of the beta task.
0251    */
0252   cpu_set_t beta_affinity;
0253 
0254   /**
0255    * @brief If this member is true, then an idle task shall execute on behalf
0256    *   of the beta task.
0257    */
0258   bool beta_idle;
0259 
0260   struct {
0261     /**
0262      * @brief This member defines the pre-condition states for the next action.
0263      */
0264     size_t pcs[ 12 ];
0265 
0266     /**
0267      * @brief If this member is true, then the test action loop is executed.
0268      */
0269     bool in_action_loop;
0270 
0271     /**
0272      * @brief This member contains the next transition map index.
0273      */
0274     size_t index;
0275 
0276     /**
0277      * @brief This member contains the current transition map entry.
0278      */
0279     ScoreSchedSmpEdfReqSetAffinity_Entry entry;
0280 
0281     /**
0282      * @brief If this member is true, then the current transition variant
0283      *   should be skipped.
0284      */
0285     bool skip;
0286   } Map;
0287 } ScoreSchedSmpEdfReqSetAffinity_Context;
0288 
0289 static ScoreSchedSmpEdfReqSetAffinity_Context
0290   ScoreSchedSmpEdfReqSetAffinity_Instance;
0291 
0292 static const char * const ScoreSchedSmpEdfReqSetAffinity_PreDesc_Before[] = {
0293   "All",
0294   "X",
0295   "NA"
0296 };
0297 
0298 static const char * const ScoreSchedSmpEdfReqSetAffinity_PreDesc_After[] = {
0299   "All",
0300   "X",
0301   "Y",
0302   "NA"
0303 };
0304 
0305 static const char * const ScoreSchedSmpEdfReqSetAffinity_PreDesc_Priority[] = {
0306   "High",
0307   "Low",
0308   "NA"
0309 };
0310 
0311 static const char * const ScoreSchedSmpEdfReqSetAffinity_PreDesc_State[] = {
0312   "Ready",
0313   "Blocked",
0314   "NA"
0315 };
0316 
0317 static const char * const ScoreSchedSmpEdfReqSetAffinity_PreDesc_Sticky[] = {
0318   "Yes",
0319   "No",
0320   "NA"
0321 };
0322 
0323 static const char * const ScoreSchedSmpEdfReqSetAffinity_PreDesc_Pinned[] = {
0324   "Yes",
0325   "No",
0326   "NA"
0327 };
0328 
0329 static const char * const ScoreSchedSmpEdfReqSetAffinity_PreDesc_AlphaPriority[] = {
0330   "High",
0331   "Low",
0332   "NA"
0333 };
0334 
0335 static const char * const ScoreSchedSmpEdfReqSetAffinity_PreDesc_AlphaAffinity[] = {
0336   "All",
0337   "X",
0338   "NA"
0339 };
0340 
0341 static const char * const ScoreSchedSmpEdfReqSetAffinity_PreDesc_AlphaIdle[] = {
0342   "Yes",
0343   "No",
0344   "NA"
0345 };
0346 
0347 static const char * const ScoreSchedSmpEdfReqSetAffinity_PreDesc_BetaPriority[] = {
0348   "High",
0349   "Low",
0350   "NA"
0351 };
0352 
0353 static const char * const ScoreSchedSmpEdfReqSetAffinity_PreDesc_BetaAffinity[] = {
0354   "All",
0355   "Y",
0356   "NA"
0357 };
0358 
0359 static const char * const ScoreSchedSmpEdfReqSetAffinity_PreDesc_BetaIdle[] = {
0360   "Yes",
0361   "No",
0362   "NA"
0363 };
0364 
0365 static const char * const * const ScoreSchedSmpEdfReqSetAffinity_PreDesc[] = {
0366   ScoreSchedSmpEdfReqSetAffinity_PreDesc_Before,
0367   ScoreSchedSmpEdfReqSetAffinity_PreDesc_After,
0368   ScoreSchedSmpEdfReqSetAffinity_PreDesc_Priority,
0369   ScoreSchedSmpEdfReqSetAffinity_PreDesc_State,
0370   ScoreSchedSmpEdfReqSetAffinity_PreDesc_Sticky,
0371   ScoreSchedSmpEdfReqSetAffinity_PreDesc_Pinned,
0372   ScoreSchedSmpEdfReqSetAffinity_PreDesc_AlphaPriority,
0373   ScoreSchedSmpEdfReqSetAffinity_PreDesc_AlphaAffinity,
0374   ScoreSchedSmpEdfReqSetAffinity_PreDesc_AlphaIdle,
0375   ScoreSchedSmpEdfReqSetAffinity_PreDesc_BetaPriority,
0376   ScoreSchedSmpEdfReqSetAffinity_PreDesc_BetaAffinity,
0377   ScoreSchedSmpEdfReqSetAffinity_PreDesc_BetaIdle,
0378   NULL
0379 };
0380 
0381 #define TASK TQ_BLOCKER_C
0382 
0383 #define ALPHA TQ_BLOCKER_A
0384 
0385 #define BETA TQ_BLOCKER_B
0386 
0387 static void ScoreSchedSmpEdfReqSetAffinity_Pre_Before_Prepare(
0388   ScoreSchedSmpEdfReqSetAffinity_Context   *ctx,
0389   ScoreSchedSmpEdfReqSetAffinity_Pre_Before state
0390 )
0391 {
0392   switch ( state ) {
0393     case ScoreSchedSmpEdfReqSetAffinity_Pre_Before_All: {
0394       /*
0395        * While task ``T`` is affine to all processors of its home scheduler
0396        * before the new thread to processor affinity is set.
0397        */
0398       CPU_FILL( &ctx->task_affinity_before );
0399       break;
0400     }
0401 
0402     case ScoreSchedSmpEdfReqSetAffinity_Pre_Before_X: {
0403       /*
0404        * While task ``T`` is affine to processor ``X`` before the new thread to
0405        * processor affinity is set.
0406        */
0407       CPU_ZERO( &ctx->task_affinity_before );
0408       CPU_SET( 0, &ctx->task_affinity_before );
0409       break;
0410     }
0411 
0412     case ScoreSchedSmpEdfReqSetAffinity_Pre_Before_NA:
0413       break;
0414   }
0415 }
0416 
0417 static void ScoreSchedSmpEdfReqSetAffinity_Pre_After_Prepare(
0418   ScoreSchedSmpEdfReqSetAffinity_Context  *ctx,
0419   ScoreSchedSmpEdfReqSetAffinity_Pre_After state
0420 )
0421 {
0422   switch ( state ) {
0423     case ScoreSchedSmpEdfReqSetAffinity_Pre_After_All: {
0424       /*
0425        * While task ``T`` is set to be affine to all processors of its home
0426        * scheduler.
0427        */
0428       CPU_FILL( &ctx->task_affinity_after );
0429       break;
0430     }
0431 
0432     case ScoreSchedSmpEdfReqSetAffinity_Pre_After_X: {
0433       /*
0434        * While task ``T`` is set to be affine to processor ``X``.
0435        */
0436       CPU_ZERO( &ctx->task_affinity_after );
0437       CPU_SET( 0, &ctx->task_affinity_after );
0438       break;
0439     }
0440 
0441     case ScoreSchedSmpEdfReqSetAffinity_Pre_After_Y: {
0442       /*
0443        * While task ``T`` is set to be affine to processor ``Y``.
0444        */
0445       CPU_ZERO( &ctx->task_affinity_after );
0446       CPU_SET( 1, &ctx->task_affinity_after );
0447       break;
0448     }
0449 
0450     case ScoreSchedSmpEdfReqSetAffinity_Pre_After_NA:
0451       break;
0452   }
0453 }
0454 
0455 static void ScoreSchedSmpEdfReqSetAffinity_Pre_Priority_Prepare(
0456   ScoreSchedSmpEdfReqSetAffinity_Context     *ctx,
0457   ScoreSchedSmpEdfReqSetAffinity_Pre_Priority state
0458 )
0459 {
0460   switch ( state ) {
0461     case ScoreSchedSmpEdfReqSetAffinity_Pre_Priority_High: {
0462       /*
0463        * While task ``T`` has a high priority.
0464        */
0465       ctx->task_priority = PRIO_HIGH;
0466       break;
0467     }
0468 
0469     case ScoreSchedSmpEdfReqSetAffinity_Pre_Priority_Low: {
0470       /*
0471        * While task ``T`` has a low priority.
0472        */
0473       ctx->task_priority = PRIO_NORMAL;
0474       break;
0475     }
0476 
0477     case ScoreSchedSmpEdfReqSetAffinity_Pre_Priority_NA:
0478       break;
0479   }
0480 }
0481 
0482 static void ScoreSchedSmpEdfReqSetAffinity_Pre_State_Prepare(
0483   ScoreSchedSmpEdfReqSetAffinity_Context  *ctx,
0484   ScoreSchedSmpEdfReqSetAffinity_Pre_State state
0485 )
0486 {
0487   switch ( state ) {
0488     case ScoreSchedSmpEdfReqSetAffinity_Pre_State_Ready: {
0489       /*
0490        * While task ``T`` is ready.
0491        */
0492       ctx->task_ready = true;
0493       break;
0494     }
0495 
0496     case ScoreSchedSmpEdfReqSetAffinity_Pre_State_Blocked: {
0497       /*
0498        * While task ``T`` is blocked.
0499        */
0500       ctx->task_ready = false;
0501       break;
0502     }
0503 
0504     case ScoreSchedSmpEdfReqSetAffinity_Pre_State_NA:
0505       break;
0506   }
0507 }
0508 
0509 static void ScoreSchedSmpEdfReqSetAffinity_Pre_Sticky_Prepare(
0510   ScoreSchedSmpEdfReqSetAffinity_Context   *ctx,
0511   ScoreSchedSmpEdfReqSetAffinity_Pre_Sticky state
0512 )
0513 {
0514   switch ( state ) {
0515     case ScoreSchedSmpEdfReqSetAffinity_Pre_Sticky_Yes: {
0516       /*
0517        * While task ``T`` is sticky.
0518        */
0519       ctx->task_sticky = true;
0520       break;
0521     }
0522 
0523     case ScoreSchedSmpEdfReqSetAffinity_Pre_Sticky_No: {
0524       /*
0525        * While task ``T`` is not sticky.
0526        */
0527       ctx->task_sticky = false;
0528       break;
0529     }
0530 
0531     case ScoreSchedSmpEdfReqSetAffinity_Pre_Sticky_NA:
0532       break;
0533   }
0534 }
0535 
0536 static void ScoreSchedSmpEdfReqSetAffinity_Pre_Pinned_Prepare(
0537   ScoreSchedSmpEdfReqSetAffinity_Context   *ctx,
0538   ScoreSchedSmpEdfReqSetAffinity_Pre_Pinned state
0539 )
0540 {
0541   switch ( state ) {
0542     case ScoreSchedSmpEdfReqSetAffinity_Pre_Pinned_Yes: {
0543       /*
0544        * While task ``T`` is pinned to a processor.
0545        */
0546       ctx->task_pinned = true;
0547       break;
0548     }
0549 
0550     case ScoreSchedSmpEdfReqSetAffinity_Pre_Pinned_No: {
0551       /*
0552        * While task ``T`` is not pinned to a processor.
0553        */
0554       ctx->task_pinned = false;
0555       break;
0556     }
0557 
0558     case ScoreSchedSmpEdfReqSetAffinity_Pre_Pinned_NA:
0559       break;
0560   }
0561 }
0562 
0563 static void ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaPriority_Prepare(
0564   ScoreSchedSmpEdfReqSetAffinity_Context          *ctx,
0565   ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaPriority state
0566 )
0567 {
0568   switch ( state ) {
0569     case ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaPriority_High: {
0570       /*
0571        * While task ``A`` has a high priority.
0572        */
0573       ctx->alpha_priority = PRIO_HIGH;
0574       break;
0575     }
0576 
0577     case ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaPriority_Low: {
0578       /*
0579        * While task ``A`` has a low priority.
0580        */
0581       ctx->alpha_priority = PRIO_NORMAL;
0582       break;
0583     }
0584 
0585     case ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaPriority_NA:
0586       break;
0587   }
0588 }
0589 
0590 static void ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaAffinity_Prepare(
0591   ScoreSchedSmpEdfReqSetAffinity_Context          *ctx,
0592   ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaAffinity state
0593 )
0594 {
0595   switch ( state ) {
0596     case ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaAffinity_All: {
0597       /*
0598        * While task ``A`` is affine to all processors of its home scheduler.
0599        */
0600       CPU_FILL( &ctx->alpha_affinity );
0601       break;
0602     }
0603 
0604     case ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaAffinity_X: {
0605       /*
0606        * While task ``A`` is affine to processor ``X``.
0607        */
0608       CPU_ZERO( &ctx->alpha_affinity );
0609       CPU_SET( 0, &ctx->alpha_affinity );
0610       break;
0611     }
0612 
0613     case ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaAffinity_NA:
0614       break;
0615   }
0616 }
0617 
0618 static void ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaIdle_Prepare(
0619   ScoreSchedSmpEdfReqSetAffinity_Context      *ctx,
0620   ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaIdle state
0621 )
0622 {
0623   switch ( state ) {
0624     case ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaIdle_Yes: {
0625       /*
0626        * While task ``A`` is sticky, while task ``A`` is blocked.
0627        */
0628       ctx->alpha_idle = true;
0629       break;
0630     }
0631 
0632     case ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaIdle_No: {
0633       /*
0634        * While task ``A`` is not sticky.
0635        */
0636       ctx->alpha_idle = false;
0637       break;
0638     }
0639 
0640     case ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaIdle_NA:
0641       break;
0642   }
0643 }
0644 
0645 static void ScoreSchedSmpEdfReqSetAffinity_Pre_BetaPriority_Prepare(
0646   ScoreSchedSmpEdfReqSetAffinity_Context         *ctx,
0647   ScoreSchedSmpEdfReqSetAffinity_Pre_BetaPriority state
0648 )
0649 {
0650   switch ( state ) {
0651     case ScoreSchedSmpEdfReqSetAffinity_Pre_BetaPriority_High: {
0652       /*
0653        * While task ``B`` has a high priority.
0654        */
0655       ctx->beta_priority = PRIO_HIGH;
0656       break;
0657     }
0658 
0659     case ScoreSchedSmpEdfReqSetAffinity_Pre_BetaPriority_Low: {
0660       /*
0661        * While task ``B`` has a low priority.
0662        */
0663       ctx->beta_priority = PRIO_NORMAL;
0664       break;
0665     }
0666 
0667     case ScoreSchedSmpEdfReqSetAffinity_Pre_BetaPriority_NA:
0668       break;
0669   }
0670 }
0671 
0672 static void ScoreSchedSmpEdfReqSetAffinity_Pre_BetaAffinity_Prepare(
0673   ScoreSchedSmpEdfReqSetAffinity_Context         *ctx,
0674   ScoreSchedSmpEdfReqSetAffinity_Pre_BetaAffinity state
0675 )
0676 {
0677   switch ( state ) {
0678     case ScoreSchedSmpEdfReqSetAffinity_Pre_BetaAffinity_All: {
0679       /*
0680        * While task ``B`` is affine to all processors of its home scheduler.
0681        */
0682       CPU_FILL( &ctx->beta_affinity );
0683       break;
0684     }
0685 
0686     case ScoreSchedSmpEdfReqSetAffinity_Pre_BetaAffinity_Y: {
0687       /*
0688        * While task ``B`` is affine to processor ``Y``.
0689        */
0690       CPU_ZERO( &ctx->beta_affinity );
0691       CPU_SET( 1, &ctx->beta_affinity );
0692       break;
0693     }
0694 
0695     case ScoreSchedSmpEdfReqSetAffinity_Pre_BetaAffinity_NA:
0696       break;
0697   }
0698 }
0699 
0700 static void ScoreSchedSmpEdfReqSetAffinity_Pre_BetaIdle_Prepare(
0701   ScoreSchedSmpEdfReqSetAffinity_Context     *ctx,
0702   ScoreSchedSmpEdfReqSetAffinity_Pre_BetaIdle state
0703 )
0704 {
0705   switch ( state ) {
0706     case ScoreSchedSmpEdfReqSetAffinity_Pre_BetaIdle_Yes: {
0707       /*
0708        * While task ``B`` is sticky, while task ``B`` is blocked.
0709        */
0710       ctx->beta_idle = true;
0711       break;
0712     }
0713 
0714     case ScoreSchedSmpEdfReqSetAffinity_Pre_BetaIdle_No: {
0715       /*
0716        * While task ``B`` is not sticky,
0717        */
0718       ctx->beta_idle = false;
0719       break;
0720     }
0721 
0722     case ScoreSchedSmpEdfReqSetAffinity_Pre_BetaIdle_NA:
0723       break;
0724   }
0725 }
0726 
0727 static void ScoreSchedSmpEdfReqSetAffinity_Post_X_Check(
0728   ScoreSchedSmpEdfReqSetAffinity_Context *ctx,
0729   ScoreSchedSmpEdfReqSetAffinity_Post_X   state
0730 )
0731 {
0732   const Per_CPU_Control *cpu;
0733   const Thread_Control  *scheduled;
0734   const Scheduler_Node  *scheduler_node;
0735 
0736   cpu = _Per_CPU_Get_by_index( 0 );
0737   scheduled = cpu->heir;
0738 
0739   switch ( state ) {
0740     case ScoreSchedSmpEdfReqSetAffinity_Post_X_Task: {
0741       /*
0742        * The task ``T`` shall be scheduled on processor ``X``.
0743        */
0744       T_eq_ptr( scheduled, ctx->tq_ctx.worker_tcb[ TASK ] );
0745       break;
0746     }
0747 
0748     case ScoreSchedSmpEdfReqSetAffinity_Post_X_TaskIdle: {
0749       /*
0750        * An idle task on behalf of task ``T`` shall be scheduled on processor
0751        * ``X``.
0752        */
0753       T_true( scheduled->is_idle );
0754       scheduler_node = _Thread_Scheduler_get_home_node(
0755         ctx->tq_ctx.worker_tcb[ TASK ]
0756       );
0757       T_eq_ptr( scheduler_node->user, scheduled );
0758       break;
0759     }
0760 
0761     case ScoreSchedSmpEdfReqSetAffinity_Post_X_Alpha: {
0762       /*
0763        * The task ``A`` shall be scheduled on processor ``X``.
0764        */
0765       T_eq_ptr( scheduled, ctx->tq_ctx.worker_tcb[ ALPHA ] );
0766       break;
0767     }
0768 
0769     case ScoreSchedSmpEdfReqSetAffinity_Post_X_AlphaIdle: {
0770       /*
0771        * An idle task on behalf of task ``A`` shall be scheduled on processor
0772        * ``X``.
0773        */
0774       T_true( scheduled->is_idle );
0775       scheduler_node = _Thread_Scheduler_get_home_node(
0776         ctx->tq_ctx.worker_tcb[ ALPHA ]
0777       );
0778       T_eq_ptr( scheduler_node->user, scheduled );
0779       break;
0780     }
0781 
0782     case ScoreSchedSmpEdfReqSetAffinity_Post_X_Beta: {
0783       /*
0784        * The task ``B`` shall be scheduled on processor ``X``.
0785        */
0786       T_eq_ptr( scheduled, ctx->tq_ctx.worker_tcb[ BETA ] );
0787       break;
0788     }
0789 
0790     case ScoreSchedSmpEdfReqSetAffinity_Post_X_BetaIdle: {
0791       /*
0792        * An idle task on behalf of task ``B`` shall be scheduled on processor
0793        * ``X``.
0794        */
0795       T_true( scheduled->is_idle );
0796       scheduler_node = _Thread_Scheduler_get_home_node(
0797         ctx->tq_ctx.worker_tcb[ BETA ]
0798       );
0799       T_eq_ptr( scheduler_node->user, scheduled );
0800       break;
0801     }
0802 
0803     case ScoreSchedSmpEdfReqSetAffinity_Post_X_NA:
0804       break;
0805   }
0806 }
0807 
0808 static void ScoreSchedSmpEdfReqSetAffinity_Post_Y_Check(
0809   ScoreSchedSmpEdfReqSetAffinity_Context *ctx,
0810   ScoreSchedSmpEdfReqSetAffinity_Post_Y   state
0811 )
0812 {
0813   const Per_CPU_Control *cpu;
0814   const Thread_Control  *scheduled;
0815   const Scheduler_Node  *scheduler_node;
0816 
0817   cpu = _Per_CPU_Get_by_index( 1 );
0818   scheduled = cpu->heir;
0819 
0820   switch ( state ) {
0821     case ScoreSchedSmpEdfReqSetAffinity_Post_Y_Task: {
0822       /*
0823        * The task ``T`` shall be scheduled on processor ``Y``.
0824        */
0825       T_eq_ptr( scheduled, ctx->tq_ctx.worker_tcb[ TASK ] );
0826       break;
0827     }
0828 
0829     case ScoreSchedSmpEdfReqSetAffinity_Post_Y_TaskIdle: {
0830       /*
0831        * An idle task on behalf of task ``T`` shall be scheduled on processor
0832        * ``Y``.
0833        */
0834       T_true( scheduled->is_idle );
0835       scheduler_node = _Thread_Scheduler_get_home_node(
0836         ctx->tq_ctx.worker_tcb[ TASK ]
0837       );
0838       T_eq_ptr( scheduler_node->user, scheduled );
0839       break;
0840     }
0841 
0842     case ScoreSchedSmpEdfReqSetAffinity_Post_Y_Alpha: {
0843       /*
0844        * The task ``A`` shall be scheduled on processor ``Y``.
0845        */
0846       T_eq_ptr( scheduled, ctx->tq_ctx.worker_tcb[ ALPHA ] );
0847       break;
0848     }
0849 
0850     case ScoreSchedSmpEdfReqSetAffinity_Post_Y_AlphaIdle: {
0851       /*
0852        * An idle task on behalf of task ``A`` shall be scheduled on processor
0853        * ``Y``.
0854        */
0855       T_true( scheduled->is_idle );
0856       scheduler_node = _Thread_Scheduler_get_home_node(
0857         ctx->tq_ctx.worker_tcb[ ALPHA ]
0858       );
0859       T_eq_ptr( scheduler_node->user, scheduled );
0860       break;
0861     }
0862 
0863     case ScoreSchedSmpEdfReqSetAffinity_Post_Y_Beta: {
0864       /*
0865        * The task ``B`` shall be scheduled on processor ``Y``.
0866        */
0867       T_eq_ptr( scheduled, ctx->tq_ctx.worker_tcb[ BETA ] );
0868       break;
0869     }
0870 
0871     case ScoreSchedSmpEdfReqSetAffinity_Post_Y_BetaIdle: {
0872       /*
0873        * An idle task on behalf of task ``B`` shall be scheduled on processor
0874        * ``Y``.
0875        */
0876       T_true( scheduled->is_idle );
0877       scheduler_node = _Thread_Scheduler_get_home_node(
0878         ctx->tq_ctx.worker_tcb[ BETA ]
0879       );
0880       T_eq_ptr( scheduler_node->user, scheduled );
0881       break;
0882     }
0883 
0884     case ScoreSchedSmpEdfReqSetAffinity_Post_Y_NA:
0885       break;
0886   }
0887 }
0888 
0889 static void ScoreSchedSmpEdfReqSetAffinity_Setup(
0890   ScoreSchedSmpEdfReqSetAffinity_Context *ctx
0891 )
0892 {
0893   rtems_status_code sc;
0894   rtems_id          mutex_a;
0895   rtems_id          mutex_b;
0896   rtems_id          mutex_c;
0897 
0898   memset( ctx, 0, sizeof( *ctx ) );
0899   ctx->tq_ctx.deadlock = TQ_DEADLOCK_STATUS;
0900   ctx->tq_ctx.enqueue_prepare = TQEnqueuePrepareDefault;
0901   ctx->tq_ctx.enqueue_done = TQEnqueueDoneDefault;
0902   ctx->tq_ctx.enqueue = TQEnqueueClassicSem;
0903   ctx->tq_ctx.surrender = TQSurrenderClassicSem;
0904   ctx->tq_ctx.get_owner = TQGetOwnerClassicSem;
0905   ctx->tq_ctx.convert_status = TQConvertStatusClassic;
0906   TQInitialize( &ctx->tq_ctx );
0907 
0908   DeleteMutex( ctx->tq_ctx.mutex_id[ TQ_MUTEX_A ] );
0909   DeleteMutex( ctx->tq_ctx.mutex_id[ TQ_MUTEX_B ] );
0910   DeleteMutex( ctx->tq_ctx.mutex_id[ TQ_MUTEX_C ] );
0911 
0912   mutex_a = 0;
0913   sc = rtems_semaphore_create(
0914     rtems_build_name( 'M', 'T', 'X', 'A' ),
0915     1,
0916     RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY |
0917       RTEMS_MULTIPROCESSOR_RESOURCE_SHARING,
0918     PRIO_LOW,
0919     &mutex_a
0920   );
0921   T_rsc_success( sc );
0922 
0923   mutex_b = 0;
0924   sc = rtems_semaphore_create(
0925     rtems_build_name( 'M', 'T', 'X', 'B' ),
0926     1,
0927     RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY |
0928       RTEMS_MULTIPROCESSOR_RESOURCE_SHARING,
0929     PRIO_VERY_LOW,
0930     &mutex_b
0931   );
0932   T_rsc_success( sc );
0933 
0934   mutex_c = 0;
0935   sc = rtems_semaphore_create(
0936     rtems_build_name( 'M', 'T', 'X', 'C' ),
0937     1,
0938     RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY |
0939       RTEMS_MULTIPROCESSOR_RESOURCE_SHARING,
0940     PRIO_NORMAL,
0941     &mutex_c
0942   );
0943   T_rsc_success( sc );
0944 
0945   ctx->tq_ctx.mutex_id[ TQ_MUTEX_A ] = mutex_a;
0946   ctx->tq_ctx.mutex_id[ TQ_MUTEX_B ] = mutex_b;
0947   ctx->tq_ctx.mutex_id[ TQ_MUTEX_C ] = mutex_c;
0948 
0949   RemoveProcessor( SCHEDULER_B_ID, 1 );
0950   AddProcessor( SCHEDULER_A_ID, 1 );
0951 
0952   TQSetPriority( &ctx->tq_ctx, TASK, PRIO_NORMAL );
0953   TQSetPriority( &ctx->tq_ctx, ALPHA, PRIO_LOW );
0954   TQSetPriority( &ctx->tq_ctx, BETA, PRIO_VERY_LOW );
0955 }
0956 
0957 static void ScoreSchedSmpEdfReqSetAffinity_Setup_Wrap( void *arg )
0958 {
0959   ScoreSchedSmpEdfReqSetAffinity_Context *ctx;
0960 
0961   ctx = arg;
0962   ctx->Map.in_action_loop = false;
0963   ScoreSchedSmpEdfReqSetAffinity_Setup( ctx );
0964 }
0965 
0966 static void ScoreSchedSmpEdfReqSetAffinity_Teardown(
0967   ScoreSchedSmpEdfReqSetAffinity_Context *ctx
0968 )
0969 {
0970   SetSelfAffinityAll();
0971   TQDestroy( &ctx->tq_ctx );
0972   RemoveProcessor( SCHEDULER_A_ID, 1 );
0973   AddProcessor( SCHEDULER_B_ID, 1 );
0974 }
0975 
0976 static void ScoreSchedSmpEdfReqSetAffinity_Teardown_Wrap( void *arg )
0977 {
0978   ScoreSchedSmpEdfReqSetAffinity_Context *ctx;
0979 
0980   ctx = arg;
0981   ctx->Map.in_action_loop = false;
0982   ScoreSchedSmpEdfReqSetAffinity_Teardown( ctx );
0983 }
0984 
0985 static void ScoreSchedSmpEdfReqSetAffinity_Action(
0986   ScoreSchedSmpEdfReqSetAffinity_Context *ctx
0987 )
0988 {
0989   rtems_event_set events;
0990 
0991   SetSelfPriority( PRIO_ULTRA_HIGH );
0992   SetSelfAffinityAll();
0993 
0994   if ( ctx->beta_idle ) {
0995     events = TQ_EVENT_MUTEX_B_OBTAIN;
0996     TQSendAndWaitForExecutionStop( &ctx->tq_ctx, BETA, events );
0997   } else {
0998     ctx->tq_ctx.busy_wait[ BETA ] = true;
0999     events = TQ_EVENT_BUSY_WAIT;
1000     TQSendAndSynchronizeRunner( &ctx->tq_ctx, BETA, events );
1001   }
1002 
1003   if ( ctx->alpha_idle ) {
1004     events = TQ_EVENT_MUTEX_A_OBTAIN;
1005     TQSendAndWaitForExecutionStop( &ctx->tq_ctx, ALPHA, events );
1006   } else {
1007     ctx->tq_ctx.busy_wait[ ALPHA ] = true;
1008     events = TQ_EVENT_BUSY_WAIT;
1009     TQSendAndSynchronizeRunner( &ctx->tq_ctx, ALPHA, events );
1010   }
1011 
1012   if ( ctx->task_pinned ) {
1013     SetSelfAffinityOne( 1 );
1014     TQSendAndSynchronizeRunner( &ctx->tq_ctx, TASK, TQ_EVENT_PIN );
1015     SetSelfAffinityAll();
1016   }
1017 
1018   if ( ctx->task_ready ) {
1019     ctx->tq_ctx.busy_wait[ TASK ] = true;
1020     events = TQ_EVENT_BUSY_WAIT;
1021   } else {
1022     events = 0;
1023   }
1024 
1025   if ( ctx->task_sticky ) {
1026     events |= TQ_EVENT_MUTEX_C_OBTAIN;
1027   }
1028 
1029   TQSendAndSynchronizeRunner( &ctx->tq_ctx, TASK, events );
1030 
1031   if ( !ctx->task_ready ) {
1032     TQWaitForExecutionStop( &ctx->tq_ctx, TASK );
1033   }
1034 
1035   (void) _Thread_Dispatch_disable();
1036 
1037   SetAffinity( ctx->tq_ctx.worker_id[ TASK ], &ctx->task_affinity_before );
1038   SetAffinity( ctx->tq_ctx.worker_id[ ALPHA ], &ctx->alpha_affinity );
1039   SetAffinity( ctx->tq_ctx.worker_id[ BETA ], &ctx->beta_affinity );
1040   SetSelfAffinityOne( 1 );
1041   TQSetPriority( &ctx->tq_ctx, TASK, ctx->task_priority );
1042   SetSelfPriority( PRIO_ULTRA_LOW );
1043   TQSetPriority( &ctx->tq_ctx, ALPHA, ctx->alpha_priority );
1044   TQSetPriority( &ctx->tq_ctx, BETA, ctx->beta_priority );
1045 
1046   SetAffinity( ctx->tq_ctx.worker_id[ TASK ], &ctx->task_affinity_after );
1047 }
1048 
1049 static void ScoreSchedSmpEdfReqSetAffinity_Cleanup(
1050   ScoreSchedSmpEdfReqSetAffinity_Context *ctx
1051 )
1052 {
1053   rtems_event_set events;
1054 
1055   SetSelfPriority( PRIO_ULTRA_HIGH );
1056   _Thread_Dispatch_enable( _Per_CPU_Get() );
1057 
1058   SetSelfAffinityAll();
1059 
1060   ctx->tq_ctx.busy_wait[ TASK ] = false;
1061   ctx->tq_ctx.busy_wait[ ALPHA ] = false;
1062   ctx->tq_ctx.busy_wait[ BETA ] = false;
1063 
1064   TQSetPriority( &ctx->tq_ctx, TASK, PRIO_NORMAL );
1065   TQSetPriority( &ctx->tq_ctx, ALPHA, PRIO_LOW );
1066   TQSetPriority( &ctx->tq_ctx, BETA, PRIO_VERY_LOW );
1067 
1068   if ( ctx->task_sticky ) {
1069     events = TQ_EVENT_MUTEX_C_RELEASE;
1070   } else {
1071     events = 0;
1072   }
1073 
1074   if ( ctx->task_pinned ) {
1075     events |= TQ_EVENT_UNPIN;
1076   }
1077 
1078   if ( events != 0 ) {
1079     TQSendAndWaitForExecutionStop( &ctx->tq_ctx, TASK, events );
1080   } else {
1081     TQWaitForExecutionStop( &ctx->tq_ctx, TASK );
1082   }
1083 
1084   SetAffinityAll( ctx->tq_ctx.worker_id[ TASK ] );
1085   SetAffinityAll( ctx->tq_ctx.worker_id[ ALPHA ] );
1086 
1087   if ( ctx->alpha_idle ) {
1088     events = TQ_EVENT_MUTEX_A_RELEASE;
1089   } else {
1090     events = 0;
1091   }
1092 
1093   if ( events != 0 ) {
1094     TQSendAndWaitForExecutionStop( &ctx->tq_ctx, ALPHA, events );
1095   } else {
1096     TQWaitForExecutionStop( &ctx->tq_ctx, ALPHA );
1097   }
1098 
1099   SetAffinityAll( ctx->tq_ctx.worker_id[ BETA ] );
1100 
1101   if ( ctx->beta_idle ) {
1102     events = TQ_EVENT_MUTEX_B_RELEASE;
1103   } else {
1104     events = 0;
1105   }
1106 
1107   if ( events != 0 ) {
1108     TQSendAndWaitForExecutionStop( &ctx->tq_ctx, BETA, events );
1109   } else {
1110     TQWaitForExecutionStop( &ctx->tq_ctx, BETA );
1111   }
1112 }
1113 
1114 static const ScoreSchedSmpEdfReqSetAffinity_Entry
1115 ScoreSchedSmpEdfReqSetAffinity_Entries[] = {
1116   { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1117     ScoreSchedSmpEdfReqSetAffinity_Post_X_NA,
1118     ScoreSchedSmpEdfReqSetAffinity_Post_Y_NA },
1119   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1120     ScoreSchedSmpEdfReqSetAffinity_Post_X_AlphaIdle,
1121     ScoreSchedSmpEdfReqSetAffinity_Post_Y_BetaIdle },
1122   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1123     ScoreSchedSmpEdfReqSetAffinity_Post_X_AlphaIdle,
1124     ScoreSchedSmpEdfReqSetAffinity_Post_Y_Beta },
1125   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1126     ScoreSchedSmpEdfReqSetAffinity_Post_X_Alpha,
1127     ScoreSchedSmpEdfReqSetAffinity_Post_Y_BetaIdle },
1128   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1129     ScoreSchedSmpEdfReqSetAffinity_Post_X_Alpha,
1130     ScoreSchedSmpEdfReqSetAffinity_Post_Y_Beta },
1131   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1132     ScoreSchedSmpEdfReqSetAffinity_Post_X_Task,
1133     ScoreSchedSmpEdfReqSetAffinity_Post_Y_BetaIdle },
1134   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1135     ScoreSchedSmpEdfReqSetAffinity_Post_X_Task,
1136     ScoreSchedSmpEdfReqSetAffinity_Post_Y_Beta },
1137   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1138     ScoreSchedSmpEdfReqSetAffinity_Post_X_Task,
1139     ScoreSchedSmpEdfReqSetAffinity_Post_Y_AlphaIdle },
1140   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1141     ScoreSchedSmpEdfReqSetAffinity_Post_X_Task,
1142     ScoreSchedSmpEdfReqSetAffinity_Post_Y_Alpha },
1143   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1144     ScoreSchedSmpEdfReqSetAffinity_Post_X_AlphaIdle,
1145     ScoreSchedSmpEdfReqSetAffinity_Post_Y_Task },
1146   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1147     ScoreSchedSmpEdfReqSetAffinity_Post_X_Alpha,
1148     ScoreSchedSmpEdfReqSetAffinity_Post_Y_Task },
1149   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1150     ScoreSchedSmpEdfReqSetAffinity_Post_X_BetaIdle,
1151     ScoreSchedSmpEdfReqSetAffinity_Post_Y_AlphaIdle },
1152   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1153     ScoreSchedSmpEdfReqSetAffinity_Post_X_Beta,
1154     ScoreSchedSmpEdfReqSetAffinity_Post_Y_AlphaIdle },
1155   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1156     ScoreSchedSmpEdfReqSetAffinity_Post_X_BetaIdle,
1157     ScoreSchedSmpEdfReqSetAffinity_Post_Y_Alpha },
1158   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1159     ScoreSchedSmpEdfReqSetAffinity_Post_X_Beta,
1160     ScoreSchedSmpEdfReqSetAffinity_Post_Y_Alpha },
1161   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1162     ScoreSchedSmpEdfReqSetAffinity_Post_X_AlphaIdle,
1163     ScoreSchedSmpEdfReqSetAffinity_Post_Y_TaskIdle },
1164   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1165     ScoreSchedSmpEdfReqSetAffinity_Post_X_Alpha,
1166     ScoreSchedSmpEdfReqSetAffinity_Post_Y_TaskIdle },
1167   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1168     ScoreSchedSmpEdfReqSetAffinity_Post_X_TaskIdle,
1169     ScoreSchedSmpEdfReqSetAffinity_Post_Y_BetaIdle },
1170   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1171     ScoreSchedSmpEdfReqSetAffinity_Post_X_TaskIdle,
1172     ScoreSchedSmpEdfReqSetAffinity_Post_Y_Beta },
1173   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1174     ScoreSchedSmpEdfReqSetAffinity_Post_X_TaskIdle,
1175     ScoreSchedSmpEdfReqSetAffinity_Post_Y_AlphaIdle },
1176   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1177     ScoreSchedSmpEdfReqSetAffinity_Post_X_TaskIdle,
1178     ScoreSchedSmpEdfReqSetAffinity_Post_Y_Alpha },
1179   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1180     ScoreSchedSmpEdfReqSetAffinity_Post_X_BetaIdle,
1181     ScoreSchedSmpEdfReqSetAffinity_Post_Y_Task },
1182   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1183     ScoreSchedSmpEdfReqSetAffinity_Post_X_Beta,
1184     ScoreSchedSmpEdfReqSetAffinity_Post_Y_Task },
1185   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1186     ScoreSchedSmpEdfReqSetAffinity_Post_X_BetaIdle,
1187     ScoreSchedSmpEdfReqSetAffinity_Post_Y_TaskIdle },
1188   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1189     ScoreSchedSmpEdfReqSetAffinity_Post_X_Beta,
1190     ScoreSchedSmpEdfReqSetAffinity_Post_Y_TaskIdle }
1191 };
1192 
1193 static const uint8_t
1194 ScoreSchedSmpEdfReqSetAffinity_Map[] = {
1195   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1196   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1197   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 7, 7, 9, 9, 13, 14, 3, 4,
1198   8, 8, 10, 10, 1, 2, 1, 2, 9, 9, 9, 9, 3, 4, 3, 4, 10, 10, 10, 10, 5, 6, 5, 6,
1199   7, 7, 9, 9, 5, 6, 5, 6, 8, 8, 10, 10, 5, 6, 5, 6, 9, 9, 9, 9, 5, 6, 5, 6, 10,
1200   10, 10, 10, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 5, 6, 5, 6, 5, 6,
1201   5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 7, 7, 7, 7, 5, 6, 5, 6, 8, 8, 8, 8,
1202   5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 11, 12, 1, 2, 7, 7, 9, 9, 13,
1203   14, 3, 4, 8, 8, 10, 10, 1, 2, 1, 2, 9, 9, 9, 9, 3, 4, 3, 4, 10, 10, 10, 10,
1204   5, 6, 5, 6, 7, 7, 9, 9, 5, 6, 5, 6, 8, 8, 10, 10, 5, 6, 5, 6, 9, 9, 9, 9, 5,
1205   6, 5, 6, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1206   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1207   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2,
1208   19, 19, 15, 15, 13, 14, 3, 4, 20, 20, 16, 16, 1, 2, 1, 2, 15, 15, 15, 15, 3,
1209   4, 3, 4, 16, 16, 16, 16, 17, 18, 17, 18, 19, 19, 15, 15, 17, 18, 17, 18, 20,
1210   20, 16, 16, 17, 18, 17, 18, 15, 15, 15, 15, 17, 18, 17, 18, 16, 16, 16, 16,
1211   1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4,
1212   3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2,
1213   1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4,
1214   3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2,
1215   3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 0, 0,
1216   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1217   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1218   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 11, 12, 1, 2, 13, 14, 3, 4, 13,
1219   14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 11, 12,
1220   1, 2, 3, 4, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3,
1221   4, 11, 12, 1, 2, 7, 7, 7, 7, 13, 14, 3, 4, 8, 8, 8, 8, 1, 2, 1, 2, 1, 2, 1,
1222   2, 3, 4, 3, 4, 3, 4, 3, 4, 5, 6, 5, 6, 7, 7, 7, 7, 5, 6, 5, 6, 8, 8, 8, 8, 5,
1223   6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 11, 12, 1, 2, 11, 12, 1, 2, 13,
1224   14, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2,
1225   1, 2, 11, 12, 1, 2, 3, 4, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4,
1226   3, 4, 3, 4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1227   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1228   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 11, 12,
1229   1, 2, 13, 14, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4,
1230   3, 4, 1, 2, 1, 2, 11, 12, 1, 2, 3, 4, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2,
1231   1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4,
1232   1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4,
1233   3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2,
1234   1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4,
1235   3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2,
1236   3, 4, 3, 4, 3, 4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1237   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1238   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 7,
1239   7, 7, 7, 13, 14, 3, 4, 8, 8, 8, 8, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4,
1240   3, 4, 5, 6, 5, 6, 7, 7, 7, 7, 5, 6, 5, 6, 8, 8, 8, 8, 5, 6, 5, 6, 5, 6, 5, 6,
1241   5, 6, 5, 6, 5, 6, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 5, 6,
1242   5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 7, 7, 7, 7, 5, 6, 5, 6,
1243   8, 8, 8, 8, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 11, 12, 1, 2, 7,
1244   7, 7, 7, 13, 14, 3, 4, 8, 8, 8, 8, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4,
1245   3, 4, 5, 6, 5, 6, 7, 7, 7, 7, 5, 6, 5, 6, 8, 8, 8, 8, 5, 6, 5, 6, 5, 6, 5, 6,
1246   5, 6, 5, 6, 5, 6, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1247   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1248   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 19,
1249   19, 19, 19, 13, 14, 3, 4, 20, 20, 20, 20, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4,
1250   3, 4, 3, 4, 17, 18, 17, 18, 19, 19, 19, 19, 17, 18, 17, 18, 20, 20, 20, 20,
1251   17, 18, 17, 18, 17, 18, 17, 18, 17, 18, 17, 18, 17, 18, 17, 18, 1, 2, 1, 2,
1252   1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4,
1253   3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2,
1254   3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2,
1255   1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4,
1256   3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 0, 0, 0, 0, 0, 0,
1257   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1258   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1259   0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 11, 12, 1, 2, 13, 14, 3, 4, 13, 14, 3, 4, 1,
1260   2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 11, 12, 1, 2, 3, 4,
1261   3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 11, 12,
1262   1, 2, 7, 7, 7, 7, 13, 14, 3, 4, 8, 8, 8, 8, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3,
1263   4, 3, 4, 3, 4, 5, 6, 5, 6, 7, 7, 7, 7, 5, 6, 5, 6, 8, 8, 8, 8, 5, 6, 5, 6, 5,
1264   6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 11, 12, 1, 2, 11, 12, 1, 2, 13, 14, 3, 4,
1265   13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 11,
1266   12, 1, 2, 3, 4, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4,
1267   3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1268   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1269   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 11, 12, 1, 2, 13, 14,
1270   3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1,
1271   2, 11, 12, 1, 2, 3, 4, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3,
1272   4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1,
1273   2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3,
1274   4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3,
1275   4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1,
1276   2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3,
1277   4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1278   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1279   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 9, 9, 9, 9, 13,
1280   14, 3, 4, 10, 10, 10, 10, 1, 2, 1, 2, 9, 9, 9, 9, 3, 4, 3, 4, 10, 10, 10, 10,
1281   21, 22, 1, 2, 9, 9, 9, 9, 21, 22, 3, 4, 10, 10, 10, 10, 21, 22, 1, 2, 9, 9,
1282   9, 9, 21, 22, 3, 4, 10, 10, 10, 10, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8,
1283   8, 8, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 7, 7, 7, 7,
1284   5, 6, 5, 6, 8, 8, 8, 8, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 11,
1285   12, 1, 2, 9, 9, 9, 9, 13, 14, 3, 4, 10, 10, 10, 10, 1, 2, 1, 2, 9, 9, 9, 9,
1286   3, 4, 3, 4, 10, 10, 10, 10, 21, 22, 1, 2, 9, 9, 9, 9, 21, 22, 3, 4, 10, 10,
1287   10, 10, 21, 22, 1, 2, 9, 9, 9, 9, 21, 22, 3, 4, 10, 10, 10, 10, 0, 0, 0, 0,
1288   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1289   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1290   0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 15, 15, 15, 15, 13, 14, 3, 4, 16, 16,
1291   16, 16, 1, 2, 1, 2, 15, 15, 15, 15, 3, 4, 3, 4, 16, 16, 16, 16, 23, 24, 1, 2,
1292   15, 15, 15, 15, 23, 24, 3, 4, 16, 16, 16, 16, 23, 24, 1, 2, 15, 15, 15, 15,
1293   23, 24, 3, 4, 16, 16, 16, 16, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4,
1294   1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4,
1295   3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2,
1296   1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4,
1297   3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2,
1298   3, 4, 3, 4, 3, 4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1299   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1300   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 11,
1301   12, 1, 2, 13, 14, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3,
1302   4, 3, 4, 1, 2, 1, 2, 11, 12, 1, 2, 3, 4, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1,
1303   2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 11, 12, 1, 2, 7, 7, 7, 7, 13, 14, 3, 4, 8,
1304   8, 8, 8, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 5, 6, 5, 6, 7, 7, 7,
1305   7, 5, 6, 5, 6, 8, 8, 8, 8, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6,
1306   11, 12, 1, 2, 11, 12, 1, 2, 13, 14, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1,
1307   2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 11, 12, 1, 2, 3, 4, 3, 4, 13, 14, 3,
1308   4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1309   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1310   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1311   0, 0, 0, 11, 12, 1, 2, 11, 12, 1, 2, 13, 14, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2,
1312   1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 11, 12, 1, 2, 3, 4, 3, 4, 13,
1313   14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2,
1314   1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4,
1315   1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4,
1316   3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2,
1317   1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4,
1318   3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0,
1319   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1320   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1321   0, 0, 0, 0, 11, 12, 1, 2, 7, 7, 9, 9, 13, 14, 3, 4, 8, 8, 10, 10, 1, 2, 1, 2,
1322   9, 9, 9, 9, 3, 4, 3, 4, 10, 10, 10, 10, 5, 6, 5, 6, 7, 7, 9, 9, 5, 6, 5, 6,
1323   8, 8, 10, 10, 5, 6, 5, 6, 9, 9, 9, 9, 5, 6, 5, 6, 10, 10, 10, 10, 7, 7, 7, 7,
1324   7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6,
1325   5, 6, 5, 6, 5, 6, 7, 7, 7, 7, 5, 6, 5, 6, 8, 8, 8, 8, 5, 6, 5, 6, 5, 6, 5, 6,
1326   5, 6, 5, 6, 5, 6, 5, 6, 11, 12, 1, 2, 7, 7, 9, 9, 13, 14, 3, 4, 8, 8, 10, 10,
1327   1, 2, 1, 2, 9, 9, 9, 9, 3, 4, 3, 4, 10, 10, 10, 10, 5, 6, 5, 6, 7, 7, 9, 9,
1328   5, 6, 5, 6, 8, 8, 10, 10, 5, 6, 5, 6, 9, 9, 9, 9, 5, 6, 5, 6, 10, 10, 10, 10,
1329   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1330   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1331   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 19, 19, 15, 15, 13, 14, 3,
1332   4, 20, 20, 16, 16, 1, 2, 1, 2, 15, 15, 15, 15, 3, 4, 3, 4, 16, 16, 16, 16,
1333   17, 18, 17, 18, 19, 19, 15, 15, 17, 18, 17, 18, 20, 20, 16, 16, 17, 18, 17,
1334   18, 15, 15, 15, 15, 17, 18, 17, 18, 16, 16, 16, 16, 1, 2, 1, 2, 1, 2, 1, 2,
1335   3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2,
1336   1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4,
1337   3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2,
1338   1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4,
1339   1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1340   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1341   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1342   0, 0, 11, 12, 1, 2, 11, 12, 1, 2, 13, 14, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1,
1343   2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 11, 12, 1, 2, 3, 4, 3, 4, 13,
1344   14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 11, 12, 1, 2, 7, 7,
1345   7, 7, 13, 14, 3, 4, 8, 8, 8, 8, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3,
1346   4, 5, 6, 5, 6, 7, 7, 7, 7, 5, 6, 5, 6, 8, 8, 8, 8, 5, 6, 5, 6, 5, 6, 5, 6, 5,
1347   6, 5, 6, 5, 6, 5, 6, 11, 12, 1, 2, 11, 12, 1, 2, 13, 14, 3, 4, 13, 14, 3, 4,
1348   1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 11, 12, 1, 2, 3,
1349   4, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 0, 0,
1350   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1351   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1352   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 11, 12, 1, 2, 13, 14, 3, 4, 13,
1353   14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 11, 12,
1354   1, 2, 3, 4, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3,
1355   4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3,
1356   4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1,
1357   2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3,
1358   4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1,
1359   2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 0,
1360   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1361   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1362   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 7, 7, 7, 7, 13, 14, 3, 4, 8,
1363   8, 8, 8, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 5, 6, 5, 6, 7, 7, 7,
1364   7, 5, 6, 5, 6, 8, 8, 8, 8, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 7,
1365   7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5,
1366   6, 5, 6, 5, 6, 5, 6, 5, 6, 7, 7, 7, 7, 5, 6, 5, 6, 8, 8, 8, 8, 5, 6, 5, 6, 5,
1367   6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 11, 12, 1, 2, 7, 7, 7, 7, 13, 14, 3, 4, 8,
1368   8, 8, 8, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 5, 6, 5, 6, 7, 7, 7,
1369   7, 5, 6, 5, 6, 8, 8, 8, 8, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 0,
1370   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1371   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1372   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 19, 19, 19, 19, 13, 14, 3, 4,
1373   20, 20, 20, 20, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 17, 18, 17,
1374   18, 19, 19, 19, 19, 17, 18, 17, 18, 20, 20, 20, 20, 17, 18, 17, 18, 17, 18,
1375   17, 18, 17, 18, 17, 18, 17, 18, 17, 18, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4,
1376   3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2,
1377   1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4,
1378   1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4,
1379   3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2,
1380   1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1381   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1382   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11,
1383   12, 1, 2, 11, 12, 1, 2, 13, 14, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2,
1384   3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 11, 12, 1, 2, 3, 4, 3, 4, 13, 14, 3, 4,
1385   1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 11, 12, 1, 2, 7, 7, 7, 7, 13,
1386   14, 3, 4, 8, 8, 8, 8, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 5, 6,
1387   5, 6, 7, 7, 7, 7, 5, 6, 5, 6, 8, 8, 8, 8, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6,
1388   5, 6, 5, 6, 11, 12, 1, 2, 11, 12, 1, 2, 13, 14, 3, 4, 13, 14, 3, 4, 1, 2, 1,
1389   2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 11, 12, 1, 2, 3, 4, 3, 4,
1390   13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 0, 0, 0, 0, 0,
1391   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1392   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1393   0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 11, 12, 1, 2, 13, 14, 3, 4, 13, 14, 3, 4,
1394   1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 11, 12, 1, 2, 3,
1395   4, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2,
1396   1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4,
1397   3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2,
1398   1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4,
1399   1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4,
1400   3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 0, 0, 0, 0,
1401   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1402   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1403   0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 9, 9, 9, 9, 13, 14, 3, 4, 10, 10, 10,
1404   10, 1, 2, 1, 2, 9, 9, 9, 9, 3, 4, 3, 4, 10, 10, 10, 10, 21, 22, 1, 2, 9, 9,
1405   9, 9, 21, 22, 3, 4, 10, 10, 10, 10, 21, 22, 1, 2, 9, 9, 9, 9, 21, 22, 3, 4,
1406   10, 10, 10, 10, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 5, 6, 5, 6,
1407   5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 7, 7, 7, 7, 5, 6, 5, 6, 8, 8,
1408   8, 8, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 11, 12, 1, 2, 9, 9, 9,
1409   9, 13, 14, 3, 4, 10, 10, 10, 10, 1, 2, 1, 2, 9, 9, 9, 9, 3, 4, 3, 4, 10, 10,
1410   10, 10, 21, 22, 1, 2, 9, 9, 9, 9, 21, 22, 3, 4, 10, 10, 10, 10, 21, 22, 1, 2,
1411   9, 9, 9, 9, 21, 22, 3, 4, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1412   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1413   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1414   11, 12, 1, 2, 15, 15, 15, 15, 13, 14, 3, 4, 16, 16, 16, 16, 1, 2, 1, 2, 15,
1415   15, 15, 15, 3, 4, 3, 4, 16, 16, 16, 16, 23, 24, 1, 2, 15, 15, 15, 15, 23, 24,
1416   3, 4, 16, 16, 16, 16, 23, 24, 1, 2, 15, 15, 15, 15, 23, 24, 3, 4, 16, 16, 16,
1417   16, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2,
1418   3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2,
1419   1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4,
1420   3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2,
1421   1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4,
1422   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1423   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1424   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 11, 12, 1, 2, 13, 14, 3, 4,
1425   13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 11,
1426   12, 1, 2, 3, 4, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4,
1427   3, 4, 11, 12, 1, 2, 7, 7, 7, 7, 13, 14, 3, 4, 8, 8, 8, 8, 1, 2, 1, 2, 1, 2,
1428   1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 5, 6, 5, 6, 7, 7, 7, 7, 5, 6, 5, 6, 8, 8, 8, 8,
1429   5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 11, 12, 1, 2, 11, 12, 1, 2,
1430   13, 14, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4,
1431   1, 2, 1, 2, 11, 12, 1, 2, 3, 4, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2,
1432   3, 4, 3, 4, 3, 4, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1433   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1434   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, 1, 2, 11,
1435   12, 1, 2, 13, 14, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3,
1436   4, 3, 4, 1, 2, 1, 2, 11, 12, 1, 2, 3, 4, 3, 4, 13, 14, 3, 4, 1, 2, 1, 2, 1,
1437   2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3,
1438   4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3,
1439   4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1,
1440   2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3,
1441   4, 3, 4, 1, 2, 1, 2, 1, 2, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4, 1, 2, 1, 2, 1, 2, 1,
1442   2, 3, 4, 3, 4, 3, 4, 3, 4
1443 };
1444 
1445 static size_t ScoreSchedSmpEdfReqSetAffinity_Scope(
1446   void  *arg,
1447   char  *buf,
1448   size_t n
1449 )
1450 {
1451   ScoreSchedSmpEdfReqSetAffinity_Context *ctx;
1452 
1453   ctx = arg;
1454 
1455   if ( ctx->Map.in_action_loop ) {
1456     return T_get_scope(
1457       ScoreSchedSmpEdfReqSetAffinity_PreDesc,
1458       buf,
1459       n,
1460       ctx->Map.pcs
1461     );
1462   }
1463 
1464   return 0;
1465 }
1466 
1467 static T_fixture ScoreSchedSmpEdfReqSetAffinity_Fixture = {
1468   .setup = ScoreSchedSmpEdfReqSetAffinity_Setup_Wrap,
1469   .stop = NULL,
1470   .teardown = ScoreSchedSmpEdfReqSetAffinity_Teardown_Wrap,
1471   .scope = ScoreSchedSmpEdfReqSetAffinity_Scope,
1472   .initial_context = &ScoreSchedSmpEdfReqSetAffinity_Instance
1473 };
1474 
1475 static inline ScoreSchedSmpEdfReqSetAffinity_Entry
1476 ScoreSchedSmpEdfReqSetAffinity_PopEntry(
1477   ScoreSchedSmpEdfReqSetAffinity_Context *ctx
1478 )
1479 {
1480   size_t index;
1481 
1482   index = ctx->Map.index;
1483   ctx->Map.index = index + 1;
1484   return ScoreSchedSmpEdfReqSetAffinity_Entries[
1485     ScoreSchedSmpEdfReqSetAffinity_Map[ index ]
1486   ];
1487 }
1488 
1489 static void ScoreSchedSmpEdfReqSetAffinity_TestVariant(
1490   ScoreSchedSmpEdfReqSetAffinity_Context *ctx
1491 )
1492 {
1493   ScoreSchedSmpEdfReqSetAffinity_Pre_Before_Prepare( ctx, ctx->Map.pcs[ 0 ] );
1494   ScoreSchedSmpEdfReqSetAffinity_Pre_After_Prepare( ctx, ctx->Map.pcs[ 1 ] );
1495   ScoreSchedSmpEdfReqSetAffinity_Pre_Priority_Prepare(
1496     ctx,
1497     ctx->Map.pcs[ 2 ]
1498   );
1499   ScoreSchedSmpEdfReqSetAffinity_Pre_State_Prepare( ctx, ctx->Map.pcs[ 3 ] );
1500   ScoreSchedSmpEdfReqSetAffinity_Pre_Sticky_Prepare( ctx, ctx->Map.pcs[ 4 ] );
1501   ScoreSchedSmpEdfReqSetAffinity_Pre_Pinned_Prepare( ctx, ctx->Map.pcs[ 5 ] );
1502   ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaPriority_Prepare(
1503     ctx,
1504     ctx->Map.pcs[ 6 ]
1505   );
1506   ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaAffinity_Prepare(
1507     ctx,
1508     ctx->Map.pcs[ 7 ]
1509   );
1510   ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaIdle_Prepare(
1511     ctx,
1512     ctx->Map.pcs[ 8 ]
1513   );
1514   ScoreSchedSmpEdfReqSetAffinity_Pre_BetaPriority_Prepare(
1515     ctx,
1516     ctx->Map.pcs[ 9 ]
1517   );
1518   ScoreSchedSmpEdfReqSetAffinity_Pre_BetaAffinity_Prepare(
1519     ctx,
1520     ctx->Map.pcs[ 10 ]
1521   );
1522   ScoreSchedSmpEdfReqSetAffinity_Pre_BetaIdle_Prepare(
1523     ctx,
1524     ctx->Map.pcs[ 11 ]
1525   );
1526   ScoreSchedSmpEdfReqSetAffinity_Action( ctx );
1527   ScoreSchedSmpEdfReqSetAffinity_Post_X_Check( ctx, ctx->Map.entry.Post_X );
1528   ScoreSchedSmpEdfReqSetAffinity_Post_Y_Check( ctx, ctx->Map.entry.Post_Y );
1529 }
1530 
1531 /**
1532  * @fn void T_case_body_ScoreSchedSmpEdfReqSetAffinity( void )
1533  */
1534 T_TEST_CASE_FIXTURE(
1535   ScoreSchedSmpEdfReqSetAffinity,
1536   &ScoreSchedSmpEdfReqSetAffinity_Fixture
1537 )
1538 {
1539   ScoreSchedSmpEdfReqSetAffinity_Context *ctx;
1540 
1541   ctx = T_fixture_context();
1542   ctx->Map.in_action_loop = true;
1543   ctx->Map.index = 0;
1544 
1545   for (
1546     ctx->Map.pcs[ 0 ] = ScoreSchedSmpEdfReqSetAffinity_Pre_Before_All;
1547     ctx->Map.pcs[ 0 ] < ScoreSchedSmpEdfReqSetAffinity_Pre_Before_NA;
1548     ++ctx->Map.pcs[ 0 ]
1549   ) {
1550     for (
1551       ctx->Map.pcs[ 1 ] = ScoreSchedSmpEdfReqSetAffinity_Pre_After_All;
1552       ctx->Map.pcs[ 1 ] < ScoreSchedSmpEdfReqSetAffinity_Pre_After_NA;
1553       ++ctx->Map.pcs[ 1 ]
1554     ) {
1555       for (
1556         ctx->Map.pcs[ 2 ] = ScoreSchedSmpEdfReqSetAffinity_Pre_Priority_High;
1557         ctx->Map.pcs[ 2 ] < ScoreSchedSmpEdfReqSetAffinity_Pre_Priority_NA;
1558         ++ctx->Map.pcs[ 2 ]
1559       ) {
1560         for (
1561           ctx->Map.pcs[ 3 ] = ScoreSchedSmpEdfReqSetAffinity_Pre_State_Ready;
1562           ctx->Map.pcs[ 3 ] < ScoreSchedSmpEdfReqSetAffinity_Pre_State_NA;
1563           ++ctx->Map.pcs[ 3 ]
1564         ) {
1565           for (
1566             ctx->Map.pcs[ 4 ] = ScoreSchedSmpEdfReqSetAffinity_Pre_Sticky_Yes;
1567             ctx->Map.pcs[ 4 ] < ScoreSchedSmpEdfReqSetAffinity_Pre_Sticky_NA;
1568             ++ctx->Map.pcs[ 4 ]
1569           ) {
1570             for (
1571               ctx->Map.pcs[ 5 ] = ScoreSchedSmpEdfReqSetAffinity_Pre_Pinned_Yes;
1572               ctx->Map.pcs[ 5 ] < ScoreSchedSmpEdfReqSetAffinity_Pre_Pinned_NA;
1573               ++ctx->Map.pcs[ 5 ]
1574             ) {
1575               for (
1576                 ctx->Map.pcs[ 6 ] = ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaPriority_High;
1577                 ctx->Map.pcs[ 6 ] < ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaPriority_NA;
1578                 ++ctx->Map.pcs[ 6 ]
1579               ) {
1580                 for (
1581                   ctx->Map.pcs[ 7 ] = ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaAffinity_All;
1582                   ctx->Map.pcs[ 7 ] < ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaAffinity_NA;
1583                   ++ctx->Map.pcs[ 7 ]
1584                 ) {
1585                   for (
1586                     ctx->Map.pcs[ 8 ] = ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaIdle_Yes;
1587                     ctx->Map.pcs[ 8 ] < ScoreSchedSmpEdfReqSetAffinity_Pre_AlphaIdle_NA;
1588                     ++ctx->Map.pcs[ 8 ]
1589                   ) {
1590                     for (
1591                       ctx->Map.pcs[ 9 ] = ScoreSchedSmpEdfReqSetAffinity_Pre_BetaPriority_High;
1592                       ctx->Map.pcs[ 9 ] < ScoreSchedSmpEdfReqSetAffinity_Pre_BetaPriority_NA;
1593                       ++ctx->Map.pcs[ 9 ]
1594                     ) {
1595                       for (
1596                         ctx->Map.pcs[ 10 ] = ScoreSchedSmpEdfReqSetAffinity_Pre_BetaAffinity_All;
1597                         ctx->Map.pcs[ 10 ] < ScoreSchedSmpEdfReqSetAffinity_Pre_BetaAffinity_NA;
1598                         ++ctx->Map.pcs[ 10 ]
1599                       ) {
1600                         for (
1601                           ctx->Map.pcs[ 11 ] = ScoreSchedSmpEdfReqSetAffinity_Pre_BetaIdle_Yes;
1602                           ctx->Map.pcs[ 11 ] < ScoreSchedSmpEdfReqSetAffinity_Pre_BetaIdle_NA;
1603                           ++ctx->Map.pcs[ 11 ]
1604                         ) {
1605                           ctx->Map.entry =
1606                           ScoreSchedSmpEdfReqSetAffinity_PopEntry( ctx );
1607 
1608                           if ( ctx->Map.entry.Skip ) {
1609                             continue;
1610                           }
1611 
1612                           ScoreSchedSmpEdfReqSetAffinity_TestVariant( ctx );
1613                           ScoreSchedSmpEdfReqSetAffinity_Cleanup( ctx );
1614                         }
1615                       }
1616                     }
1617                   }
1618                 }
1619               }
1620             }
1621           }
1622         }
1623       }
1624     }
1625   }
1626 }
1627 
1628 /** @} */