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 RtemsTaskReqMode
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 <string.h>
0057 
0058 #include "tx-support.h"
0059 
0060 #include <rtems/test.h>
0061 
0062 /**
0063  * @defgroup RtemsTaskReqMode spec:/rtems/task/req/mode
0064  *
0065  * @ingroup TestsuitesValidationNoClock0
0066  * @ingroup TestsuitesValidationOneCpu0
0067  *
0068  * @{
0069  */
0070 
0071 typedef enum {
0072   RtemsTaskReqMode_Pre_PrevMode_Valid,
0073   RtemsTaskReqMode_Pre_PrevMode_Null,
0074   RtemsTaskReqMode_Pre_PrevMode_NA
0075 } RtemsTaskReqMode_Pre_PrevMode;
0076 
0077 typedef enum {
0078   RtemsTaskReqMode_Pre_PreemptCur_Yes,
0079   RtemsTaskReqMode_Pre_PreemptCur_No,
0080   RtemsTaskReqMode_Pre_PreemptCur_NA
0081 } RtemsTaskReqMode_Pre_PreemptCur;
0082 
0083 typedef enum {
0084   RtemsTaskReqMode_Pre_TimesliceCur_Yes,
0085   RtemsTaskReqMode_Pre_TimesliceCur_No,
0086   RtemsTaskReqMode_Pre_TimesliceCur_NA
0087 } RtemsTaskReqMode_Pre_TimesliceCur;
0088 
0089 typedef enum {
0090   RtemsTaskReqMode_Pre_ASRCur_Yes,
0091   RtemsTaskReqMode_Pre_ASRCur_No,
0092   RtemsTaskReqMode_Pre_ASRCur_NA
0093 } RtemsTaskReqMode_Pre_ASRCur;
0094 
0095 typedef enum {
0096   RtemsTaskReqMode_Pre_IntLvlCur_Zero,
0097   RtemsTaskReqMode_Pre_IntLvlCur_Positive,
0098   RtemsTaskReqMode_Pre_IntLvlCur_NA
0099 } RtemsTaskReqMode_Pre_IntLvlCur;
0100 
0101 typedef enum {
0102   RtemsTaskReqMode_Pre_Preempt_Yes,
0103   RtemsTaskReqMode_Pre_Preempt_No,
0104   RtemsTaskReqMode_Pre_Preempt_NA
0105 } RtemsTaskReqMode_Pre_Preempt;
0106 
0107 typedef enum {
0108   RtemsTaskReqMode_Pre_Timeslice_Yes,
0109   RtemsTaskReqMode_Pre_Timeslice_No,
0110   RtemsTaskReqMode_Pre_Timeslice_NA
0111 } RtemsTaskReqMode_Pre_Timeslice;
0112 
0113 typedef enum {
0114   RtemsTaskReqMode_Pre_ASR_Yes,
0115   RtemsTaskReqMode_Pre_ASR_No,
0116   RtemsTaskReqMode_Pre_ASR_NA
0117 } RtemsTaskReqMode_Pre_ASR;
0118 
0119 typedef enum {
0120   RtemsTaskReqMode_Pre_IntLvl_Zero,
0121   RtemsTaskReqMode_Pre_IntLvl_Positive,
0122   RtemsTaskReqMode_Pre_IntLvl_NA
0123 } RtemsTaskReqMode_Pre_IntLvl;
0124 
0125 typedef enum {
0126   RtemsTaskReqMode_Pre_PreemptMsk_Yes,
0127   RtemsTaskReqMode_Pre_PreemptMsk_No,
0128   RtemsTaskReqMode_Pre_PreemptMsk_NA
0129 } RtemsTaskReqMode_Pre_PreemptMsk;
0130 
0131 typedef enum {
0132   RtemsTaskReqMode_Pre_TimesliceMsk_Yes,
0133   RtemsTaskReqMode_Pre_TimesliceMsk_No,
0134   RtemsTaskReqMode_Pre_TimesliceMsk_NA
0135 } RtemsTaskReqMode_Pre_TimesliceMsk;
0136 
0137 typedef enum {
0138   RtemsTaskReqMode_Pre_ASRMsk_Yes,
0139   RtemsTaskReqMode_Pre_ASRMsk_No,
0140   RtemsTaskReqMode_Pre_ASRMsk_NA
0141 } RtemsTaskReqMode_Pre_ASRMsk;
0142 
0143 typedef enum {
0144   RtemsTaskReqMode_Pre_IntLvlMsk_Yes,
0145   RtemsTaskReqMode_Pre_IntLvlMsk_No,
0146   RtemsTaskReqMode_Pre_IntLvlMsk_NA
0147 } RtemsTaskReqMode_Pre_IntLvlMsk;
0148 
0149 typedef enum {
0150   RtemsTaskReqMode_Post_Status_Ok,
0151   RtemsTaskReqMode_Post_Status_InvAddr,
0152   RtemsTaskReqMode_Post_Status_NotImplIntLvl,
0153   RtemsTaskReqMode_Post_Status_NotImplIntLvlSMP,
0154   RtemsTaskReqMode_Post_Status_NotImplNoPreempt,
0155   RtemsTaskReqMode_Post_Status_NA
0156 } RtemsTaskReqMode_Post_Status;
0157 
0158 typedef enum {
0159   RtemsTaskReqMode_Post_Preempt_Yes,
0160   RtemsTaskReqMode_Post_Preempt_No,
0161   RtemsTaskReqMode_Post_Preempt_Maybe,
0162   RtemsTaskReqMode_Post_Preempt_NA
0163 } RtemsTaskReqMode_Post_Preempt;
0164 
0165 typedef enum {
0166   RtemsTaskReqMode_Post_ASR_Yes,
0167   RtemsTaskReqMode_Post_ASR_No,
0168   RtemsTaskReqMode_Post_ASR_Maybe,
0169   RtemsTaskReqMode_Post_ASR_NA
0170 } RtemsTaskReqMode_Post_ASR;
0171 
0172 typedef enum {
0173   RtemsTaskReqMode_Post_PMVar_Set,
0174   RtemsTaskReqMode_Post_PMVar_Nop,
0175   RtemsTaskReqMode_Post_PMVar_Maybe,
0176   RtemsTaskReqMode_Post_PMVar_NA
0177 } RtemsTaskReqMode_Post_PMVar;
0178 
0179 typedef enum {
0180   RtemsTaskReqMode_Post_Mode_Set,
0181   RtemsTaskReqMode_Post_Mode_Nop,
0182   RtemsTaskReqMode_Post_Mode_Maybe,
0183   RtemsTaskReqMode_Post_Mode_NA
0184 } RtemsTaskReqMode_Post_Mode;
0185 
0186 typedef struct {
0187   uint32_t Skip : 1;
0188   uint32_t Pre_PrevMode_NA : 1;
0189   uint32_t Pre_PreemptCur_NA : 1;
0190   uint32_t Pre_TimesliceCur_NA : 1;
0191   uint32_t Pre_ASRCur_NA : 1;
0192   uint32_t Pre_IntLvlCur_NA : 1;
0193   uint32_t Pre_Preempt_NA : 1;
0194   uint32_t Pre_Timeslice_NA : 1;
0195   uint32_t Pre_ASR_NA : 1;
0196   uint32_t Pre_IntLvl_NA : 1;
0197   uint32_t Pre_PreemptMsk_NA : 1;
0198   uint32_t Pre_TimesliceMsk_NA : 1;
0199   uint32_t Pre_ASRMsk_NA : 1;
0200   uint32_t Pre_IntLvlMsk_NA : 1;
0201   uint32_t Post_Status : 3;
0202   uint32_t Post_Preempt : 2;
0203   uint32_t Post_ASR : 2;
0204   uint32_t Post_PMVar : 2;
0205   uint32_t Post_Mode : 2;
0206 } RtemsTaskReqMode_Entry;
0207 
0208 /**
0209  * @brief Test context for spec:/rtems/task/req/mode test case.
0210  */
0211 typedef struct {
0212   /**
0213    * @brief This member contains the object identifier of the worker task.
0214    */
0215   rtems_id worker_id;
0216 
0217   /**
0218    * @brief null If this member is contains the initial mode of the runner.
0219    */
0220   rtems_mode runner_mode;
0221 
0222   /**
0223    * @brief This member provides a value for the previous mode set.
0224    */
0225   rtems_mode previous_mode_set_value;
0226 
0227   /**
0228    * @brief This member specifies the task mode in which rtems_task_mode() is
0229    *   called.
0230    */
0231   rtems_mode current_mode;
0232 
0233   /**
0234    * @brief This member counts worker activity.
0235    */
0236   uint32_t worker_counter;
0237 
0238   /**
0239    * @brief This member contains worker counter before the rtems_task_mode()
0240    *   call.
0241    */
0242   uint32_t worker_counter_before;
0243 
0244   /**
0245    * @brief This member contains worker counter after the rtems_task_mode()
0246    *   call.
0247    */
0248   uint32_t worker_counter_after;
0249 
0250   /**
0251    * @brief This member counts signal handler activity.
0252    */
0253   uint32_t signal_counter;
0254 
0255   /**
0256    * @brief This member contains signal counter before the rtems_task_mode()
0257    *   call.
0258    */
0259   uint32_t signal_counter_before;
0260 
0261   /**
0262    * @brief This member contains signal counter after the rtems_task_mode()
0263    *   call.
0264    */
0265   uint32_t signal_counter_after;
0266 
0267   /**
0268    * @brief This member specifies the ``mode_set`` parameter for
0269    *   rtems_task_mode().
0270    */
0271   rtems_mode mode_set;
0272 
0273   /**
0274    * @brief This member specifies the mode mask ``mask`` parameter for
0275    *   rtems_task_mode() for the action.
0276    */
0277   rtems_mode mode_mask;
0278 
0279   /**
0280    * @brief This member specifies the previous mode set ``previous_mode_set``
0281    *   parameter for rtems_task_mode().
0282    */
0283   rtems_mode *previous_mode_set;
0284 
0285   /**
0286    * @brief This member contains the return status of the rtems_task_mode()
0287    *   call.
0288    */
0289   rtems_status_code status;
0290 
0291   struct {
0292     /**
0293      * @brief This member defines the pre-condition states for the next action.
0294      */
0295     size_t pcs[ 13 ];
0296 
0297     /**
0298      * @brief If this member is true, then the test action loop is executed.
0299      */
0300     bool in_action_loop;
0301 
0302     /**
0303      * @brief This member contains the next transition map index.
0304      */
0305     size_t index;
0306 
0307     /**
0308      * @brief This member contains the current transition map entry.
0309      */
0310     RtemsTaskReqMode_Entry entry;
0311 
0312     /**
0313      * @brief If this member is true, then the current transition variant
0314      *   should be skipped.
0315      */
0316     bool skip;
0317   } Map;
0318 } RtemsTaskReqMode_Context;
0319 
0320 static RtemsTaskReqMode_Context
0321   RtemsTaskReqMode_Instance;
0322 
0323 static const char * const RtemsTaskReqMode_PreDesc_PrevMode[] = {
0324   "Valid",
0325   "Null",
0326   "NA"
0327 };
0328 
0329 static const char * const RtemsTaskReqMode_PreDesc_PreemptCur[] = {
0330   "Yes",
0331   "No",
0332   "NA"
0333 };
0334 
0335 static const char * const RtemsTaskReqMode_PreDesc_TimesliceCur[] = {
0336   "Yes",
0337   "No",
0338   "NA"
0339 };
0340 
0341 static const char * const RtemsTaskReqMode_PreDesc_ASRCur[] = {
0342   "Yes",
0343   "No",
0344   "NA"
0345 };
0346 
0347 static const char * const RtemsTaskReqMode_PreDesc_IntLvlCur[] = {
0348   "Zero",
0349   "Positive",
0350   "NA"
0351 };
0352 
0353 static const char * const RtemsTaskReqMode_PreDesc_Preempt[] = {
0354   "Yes",
0355   "No",
0356   "NA"
0357 };
0358 
0359 static const char * const RtemsTaskReqMode_PreDesc_Timeslice[] = {
0360   "Yes",
0361   "No",
0362   "NA"
0363 };
0364 
0365 static const char * const RtemsTaskReqMode_PreDesc_ASR[] = {
0366   "Yes",
0367   "No",
0368   "NA"
0369 };
0370 
0371 static const char * const RtemsTaskReqMode_PreDesc_IntLvl[] = {
0372   "Zero",
0373   "Positive",
0374   "NA"
0375 };
0376 
0377 static const char * const RtemsTaskReqMode_PreDesc_PreemptMsk[] = {
0378   "Yes",
0379   "No",
0380   "NA"
0381 };
0382 
0383 static const char * const RtemsTaskReqMode_PreDesc_TimesliceMsk[] = {
0384   "Yes",
0385   "No",
0386   "NA"
0387 };
0388 
0389 static const char * const RtemsTaskReqMode_PreDesc_ASRMsk[] = {
0390   "Yes",
0391   "No",
0392   "NA"
0393 };
0394 
0395 static const char * const RtemsTaskReqMode_PreDesc_IntLvlMsk[] = {
0396   "Yes",
0397   "No",
0398   "NA"
0399 };
0400 
0401 static const char * const * const RtemsTaskReqMode_PreDesc[] = {
0402   RtemsTaskReqMode_PreDesc_PrevMode,
0403   RtemsTaskReqMode_PreDesc_PreemptCur,
0404   RtemsTaskReqMode_PreDesc_TimesliceCur,
0405   RtemsTaskReqMode_PreDesc_ASRCur,
0406   RtemsTaskReqMode_PreDesc_IntLvlCur,
0407   RtemsTaskReqMode_PreDesc_Preempt,
0408   RtemsTaskReqMode_PreDesc_Timeslice,
0409   RtemsTaskReqMode_PreDesc_ASR,
0410   RtemsTaskReqMode_PreDesc_IntLvl,
0411   RtemsTaskReqMode_PreDesc_PreemptMsk,
0412   RtemsTaskReqMode_PreDesc_TimesliceMsk,
0413   RtemsTaskReqMode_PreDesc_ASRMsk,
0414   RtemsTaskReqMode_PreDesc_IntLvlMsk,
0415   NULL
0416 };
0417 
0418 #define INVALID_MODE 0xffffffff
0419 
0420 #define EVENT_MAKE_READY RTEMS_EVENT_0
0421 
0422 #define EVENT_TIMESLICE RTEMS_EVENT_1
0423 
0424 typedef RtemsTaskReqMode_Context Context;
0425 
0426 static void Worker( rtems_task_argument arg )
0427 {
0428   Context *ctx;
0429 
0430   ctx = (Context *) arg;
0431 
0432   while ( true ) {
0433     rtems_event_set events;
0434 
0435     events = ReceiveAnyEvents();
0436 
0437     if ( ( events & EVENT_TIMESLICE ) != 0 ) {
0438       SetSelfPriority( PRIO_NORMAL );
0439       SetSelfPriority( PRIO_HIGH );
0440     }
0441 
0442     ++ctx->worker_counter;
0443   }
0444 }
0445 
0446 static void SignalHandler( rtems_signal_set signal_set )
0447 {
0448   Context *ctx;
0449 
0450   ctx = T_fixture_context();
0451   ++ctx->signal_counter;
0452   T_eq_u32( signal_set, 0xdeadbeef );
0453 }
0454 
0455 static void ExhaustTimeslice( void )
0456 {
0457   uint32_t ticks;
0458 
0459   for (
0460     ticks = 0;
0461     ticks < rtems_configuration_get_ticks_per_timeslice();
0462     ++ticks
0463   ) {
0464     ClockTick();
0465   }
0466 }
0467 
0468 static void CheckMode(
0469   Context   *ctx,
0470   rtems_mode mode,
0471   rtems_mode mask,
0472   rtems_mode set
0473 )
0474 {
0475   rtems_status_code sc;
0476   uint32_t          counter;
0477 
0478   mode &= ~mask;
0479   mode |= set & mask;
0480 
0481   counter = ctx->worker_counter;
0482   SendEvents( ctx->worker_id, EVENT_MAKE_READY );
0483 
0484   if ( ( mode & RTEMS_PREEMPT_MASK ) == RTEMS_PREEMPT ) {
0485     T_eq_u32( ctx->worker_counter, counter + 1 );
0486   } else {
0487     T_eq_u32( ctx->worker_counter, counter );
0488   }
0489 
0490   counter = ctx->worker_counter;
0491   SendEvents( ctx->worker_id, EVENT_TIMESLICE );
0492   ExhaustTimeslice();
0493 
0494   if ( ( mode & RTEMS_PREEMPT_MASK ) == RTEMS_PREEMPT ) {
0495     if ( ( mode & RTEMS_TIMESLICE_MASK ) == RTEMS_TIMESLICE ) {
0496       T_eq_u32( ctx->worker_counter, counter + 1 );
0497     } else {
0498       T_eq_u32( ctx->worker_counter, counter );
0499     }
0500   } else {
0501     T_eq_u32( ctx->worker_counter, counter );
0502   }
0503 
0504   counter = ctx->signal_counter;
0505   sc = rtems_signal_send( RTEMS_SELF, 0xdeadbeef );
0506   T_rsc_success( sc );
0507 
0508   if ( ( mode & RTEMS_ASR_MASK ) == RTEMS_ASR ) {
0509     T_eq_u32( ctx->signal_counter, counter + 1 );
0510   } else {
0511     T_eq_u32( ctx->signal_counter, counter );
0512   }
0513 
0514   T_eq_u32( mode & RTEMS_INTERRUPT_MASK, _ISR_Get_level() );
0515 }
0516 
0517 static void RtemsTaskReqMode_Pre_PrevMode_Prepare(
0518   RtemsTaskReqMode_Context     *ctx,
0519   RtemsTaskReqMode_Pre_PrevMode state
0520 )
0521 {
0522   switch ( state ) {
0523     case RtemsTaskReqMode_Pre_PrevMode_Valid: {
0524       /*
0525        * While the ``previous_mode_set`` parameter references an object of type
0526        * rtems_mode.
0527        */
0528       ctx->previous_mode_set = &ctx->previous_mode_set_value;
0529       break;
0530     }
0531 
0532     case RtemsTaskReqMode_Pre_PrevMode_Null: {
0533       /*
0534        * While the ``previous_mode_set`` parameter is NULL.
0535        */
0536       ctx->previous_mode_set = NULL;
0537       break;
0538     }
0539 
0540     case RtemsTaskReqMode_Pre_PrevMode_NA:
0541       break;
0542   }
0543 }
0544 
0545 static void RtemsTaskReqMode_Pre_PreemptCur_Prepare(
0546   RtemsTaskReqMode_Context       *ctx,
0547   RtemsTaskReqMode_Pre_PreemptCur state
0548 )
0549 {
0550   switch ( state ) {
0551     case RtemsTaskReqMode_Pre_PreemptCur_Yes: {
0552       /*
0553        * While the calling task has preemption enabled.
0554        */
0555       ctx->current_mode |= RTEMS_PREEMPT;
0556       break;
0557     }
0558 
0559     case RtemsTaskReqMode_Pre_PreemptCur_No: {
0560       /*
0561        * Where the scheduler does not support the no-preempt mode, while the
0562        * calling task has preemption enabled.
0563        *
0564        * Where the scheduler does support the no-preempt mode, while the
0565        * calling task has preemption disabled.
0566        */
0567       if ( rtems_configuration_get_maximum_processors() > 1 ) {
0568         ctx->current_mode |= RTEMS_PREEMPT;
0569       } else {
0570         ctx->current_mode |= RTEMS_NO_PREEMPT;
0571       }
0572       break;
0573     }
0574 
0575     case RtemsTaskReqMode_Pre_PreemptCur_NA:
0576       break;
0577   }
0578 }
0579 
0580 static void RtemsTaskReqMode_Pre_TimesliceCur_Prepare(
0581   RtemsTaskReqMode_Context         *ctx,
0582   RtemsTaskReqMode_Pre_TimesliceCur state
0583 )
0584 {
0585   switch ( state ) {
0586     case RtemsTaskReqMode_Pre_TimesliceCur_Yes: {
0587       /*
0588        * While the calling task has timeslicing enabled.
0589        */
0590       ctx->current_mode |= RTEMS_TIMESLICE;
0591       break;
0592     }
0593 
0594     case RtemsTaskReqMode_Pre_TimesliceCur_No: {
0595       /*
0596        * While the calling task has timeslicing disabled.
0597        */
0598       ctx->current_mode |= RTEMS_NO_TIMESLICE;
0599       break;
0600     }
0601 
0602     case RtemsTaskReqMode_Pre_TimesliceCur_NA:
0603       break;
0604   }
0605 }
0606 
0607 static void RtemsTaskReqMode_Pre_ASRCur_Prepare(
0608   RtemsTaskReqMode_Context   *ctx,
0609   RtemsTaskReqMode_Pre_ASRCur state
0610 )
0611 {
0612   switch ( state ) {
0613     case RtemsTaskReqMode_Pre_ASRCur_Yes: {
0614       /*
0615        * While the calling task has ASR processing enabled.
0616        */
0617       ctx->current_mode |= RTEMS_ASR;
0618       break;
0619     }
0620 
0621     case RtemsTaskReqMode_Pre_ASRCur_No: {
0622       /*
0623        * While the calling task has ASR processing disabled.
0624        */
0625       ctx->current_mode |= RTEMS_NO_ASR;
0626       break;
0627     }
0628 
0629     case RtemsTaskReqMode_Pre_ASRCur_NA:
0630       break;
0631   }
0632 }
0633 
0634 static void RtemsTaskReqMode_Pre_IntLvlCur_Prepare(
0635   RtemsTaskReqMode_Context      *ctx,
0636   RtemsTaskReqMode_Pre_IntLvlCur state
0637 )
0638 {
0639   switch ( state ) {
0640     case RtemsTaskReqMode_Pre_IntLvlCur_Zero: {
0641       /*
0642        * While the calling task executes with an interrupt level of zero.
0643        */
0644       ctx->current_mode |= RTEMS_INTERRUPT_LEVEL( 0 );
0645       break;
0646     }
0647 
0648     case RtemsTaskReqMode_Pre_IntLvlCur_Positive: {
0649       /*
0650        * Where the system needs inter-processor interrupts, while the calling
0651        * task executes with an interrupt level of zero.
0652        *
0653        * Where the system does not need inter-processor interrupts, while the
0654        * calling task executes with an an interrupt level greater than zero and
0655        * less than or equal to CPU_MODES_INTERRUPT_MASK.
0656        */
0657       if ( rtems_configuration_get_maximum_processors() > 1 ) {
0658         ctx->current_mode |= RTEMS_INTERRUPT_LEVEL( 0 );
0659       } else {
0660         ctx->current_mode |= RTEMS_INTERRUPT_LEVEL( 1 );
0661       }
0662       break;
0663     }
0664 
0665     case RtemsTaskReqMode_Pre_IntLvlCur_NA:
0666       break;
0667   }
0668 }
0669 
0670 static void RtemsTaskReqMode_Pre_Preempt_Prepare(
0671   RtemsTaskReqMode_Context    *ctx,
0672   RtemsTaskReqMode_Pre_Preempt state
0673 )
0674 {
0675   switch ( state ) {
0676     case RtemsTaskReqMode_Pre_Preempt_Yes: {
0677       /*
0678        * While the ``mode_set`` parameter specifies that preemption is enabled.
0679        */
0680       ctx->mode_set |= RTEMS_PREEMPT;
0681       break;
0682     }
0683 
0684     case RtemsTaskReqMode_Pre_Preempt_No: {
0685       /*
0686        * While the ``mode_set`` parameter specifies that preemption is
0687        * disabled.
0688        */
0689       ctx->mode_set |= RTEMS_NO_PREEMPT;
0690       break;
0691     }
0692 
0693     case RtemsTaskReqMode_Pre_Preempt_NA:
0694       break;
0695   }
0696 }
0697 
0698 static void RtemsTaskReqMode_Pre_Timeslice_Prepare(
0699   RtemsTaskReqMode_Context      *ctx,
0700   RtemsTaskReqMode_Pre_Timeslice state
0701 )
0702 {
0703   switch ( state ) {
0704     case RtemsTaskReqMode_Pre_Timeslice_Yes: {
0705       /*
0706        * While the ``mode_set`` parameter specifies that timeslicing is
0707        * enabled.
0708        */
0709       ctx->mode_set |= RTEMS_TIMESLICE;
0710       break;
0711     }
0712 
0713     case RtemsTaskReqMode_Pre_Timeslice_No: {
0714       /*
0715        * While the ``mode_set`` parameter specifies that timeslicing is
0716        * disabled.
0717        */
0718       ctx->mode_set |= RTEMS_NO_TIMESLICE;
0719       break;
0720     }
0721 
0722     case RtemsTaskReqMode_Pre_Timeslice_NA:
0723       break;
0724   }
0725 }
0726 
0727 static void RtemsTaskReqMode_Pre_ASR_Prepare(
0728   RtemsTaskReqMode_Context *ctx,
0729   RtemsTaskReqMode_Pre_ASR  state
0730 )
0731 {
0732   switch ( state ) {
0733     case RtemsTaskReqMode_Pre_ASR_Yes: {
0734       /*
0735        * While the ``mode_set`` parameter specifies that ASR processing is
0736        * enabled.
0737        */
0738       ctx->mode_set |= RTEMS_ASR;
0739       break;
0740     }
0741 
0742     case RtemsTaskReqMode_Pre_ASR_No: {
0743       /*
0744        * While the ``mode_set`` parameter specifies that ASR processing is
0745        * disabled.
0746        */
0747       ctx->mode_set |= RTEMS_NO_ASR;
0748       break;
0749     }
0750 
0751     case RtemsTaskReqMode_Pre_ASR_NA:
0752       break;
0753   }
0754 }
0755 
0756 static void RtemsTaskReqMode_Pre_IntLvl_Prepare(
0757   RtemsTaskReqMode_Context   *ctx,
0758   RtemsTaskReqMode_Pre_IntLvl state
0759 )
0760 {
0761   switch ( state ) {
0762     case RtemsTaskReqMode_Pre_IntLvl_Zero: {
0763       /*
0764        * While the ``mode_set`` parameter specifies an interrupt level of zero.
0765        */
0766       ctx->mode_set |= RTEMS_INTERRUPT_LEVEL( 0 );
0767       break;
0768     }
0769 
0770     case RtemsTaskReqMode_Pre_IntLvl_Positive: {
0771       /*
0772        * While the ``mode_set`` parameter specifies an interrupt level greater
0773        * than zero and less than or equal to CPU_MODES_INTERRUPT_MASK.
0774        */
0775       ctx->mode_set |= RTEMS_INTERRUPT_LEVEL( 1 );
0776       break;
0777     }
0778 
0779     case RtemsTaskReqMode_Pre_IntLvl_NA:
0780       break;
0781   }
0782 }
0783 
0784 static void RtemsTaskReqMode_Pre_PreemptMsk_Prepare(
0785   RtemsTaskReqMode_Context       *ctx,
0786   RtemsTaskReqMode_Pre_PreemptMsk state
0787 )
0788 {
0789   switch ( state ) {
0790     case RtemsTaskReqMode_Pre_PreemptMsk_Yes: {
0791       /*
0792        * While the ``mask`` parameter specifies that the preemption mode shall
0793        * be set.
0794        */
0795       ctx->mode_mask |= RTEMS_PREEMPT_MASK;
0796       break;
0797     }
0798 
0799     case RtemsTaskReqMode_Pre_PreemptMsk_No: {
0800       /*
0801        * While the ``mask`` parameter specifies that the preemption mode shall
0802        * not be set.
0803        */
0804       /* This is the default mode mask */
0805       break;
0806     }
0807 
0808     case RtemsTaskReqMode_Pre_PreemptMsk_NA:
0809       break;
0810   }
0811 }
0812 
0813 static void RtemsTaskReqMode_Pre_TimesliceMsk_Prepare(
0814   RtemsTaskReqMode_Context         *ctx,
0815   RtemsTaskReqMode_Pre_TimesliceMsk state
0816 )
0817 {
0818   switch ( state ) {
0819     case RtemsTaskReqMode_Pre_TimesliceMsk_Yes: {
0820       /*
0821        * While the ``mask`` parameter specifies that the timeslicing mode shall
0822        * be set.
0823        */
0824       ctx->mode_mask |= RTEMS_TIMESLICE_MASK;
0825       break;
0826     }
0827 
0828     case RtemsTaskReqMode_Pre_TimesliceMsk_No: {
0829       /*
0830        * While the ``mask`` parameter specifies that the timeslicing mode shall
0831        * not be set.
0832        */
0833       /* This is the default mode mask */
0834       break;
0835     }
0836 
0837     case RtemsTaskReqMode_Pre_TimesliceMsk_NA:
0838       break;
0839   }
0840 }
0841 
0842 static void RtemsTaskReqMode_Pre_ASRMsk_Prepare(
0843   RtemsTaskReqMode_Context   *ctx,
0844   RtemsTaskReqMode_Pre_ASRMsk state
0845 )
0846 {
0847   switch ( state ) {
0848     case RtemsTaskReqMode_Pre_ASRMsk_Yes: {
0849       /*
0850        * While the ``mask`` parameter specifies that the ASR processing mode
0851        * shall be set.
0852        */
0853       ctx->mode_mask |= RTEMS_ASR_MASK;
0854       break;
0855     }
0856 
0857     case RtemsTaskReqMode_Pre_ASRMsk_No: {
0858       /*
0859        * While the ``mask`` parameter specifies that the ASR processing mode
0860        * shall not be set.
0861        */
0862       /* This is the default mode mask */
0863       break;
0864     }
0865 
0866     case RtemsTaskReqMode_Pre_ASRMsk_NA:
0867       break;
0868   }
0869 }
0870 
0871 static void RtemsTaskReqMode_Pre_IntLvlMsk_Prepare(
0872   RtemsTaskReqMode_Context      *ctx,
0873   RtemsTaskReqMode_Pre_IntLvlMsk state
0874 )
0875 {
0876   switch ( state ) {
0877     case RtemsTaskReqMode_Pre_IntLvlMsk_Yes: {
0878       /*
0879        * While the ``mask`` parameter specifies that the interrupt level shall
0880        * be set.
0881        */
0882       ctx->mode_mask |= RTEMS_INTERRUPT_MASK;
0883       break;
0884     }
0885 
0886     case RtemsTaskReqMode_Pre_IntLvlMsk_No: {
0887       /*
0888        * While the ``mask`` parameter specifies that the interrupt level shall
0889        * not be set.
0890        */
0891       /* This is the default mode mask */
0892       break;
0893     }
0894 
0895     case RtemsTaskReqMode_Pre_IntLvlMsk_NA:
0896       break;
0897   }
0898 }
0899 
0900 static void RtemsTaskReqMode_Post_Status_Check(
0901   RtemsTaskReqMode_Context    *ctx,
0902   RtemsTaskReqMode_Post_Status state
0903 )
0904 {
0905   switch ( state ) {
0906     case RtemsTaskReqMode_Post_Status_Ok: {
0907       /*
0908        * The return status of rtems_task_mode() shall be RTEMS_SUCCESSFUL.
0909        */
0910       T_rsc_success( ctx->status );
0911       break;
0912     }
0913 
0914     case RtemsTaskReqMode_Post_Status_InvAddr: {
0915       /*
0916        * The return status of rtems_task_mode() shall be RTEMS_INVALID_ADDRESS.
0917        */
0918       T_rsc( ctx->status, RTEMS_INVALID_ADDRESS );
0919       break;
0920     }
0921 
0922     case RtemsTaskReqMode_Post_Status_NotImplIntLvl: {
0923       /*
0924        * The return status of rtems_task_mode() shall be RTEMS_NOT_IMPLEMENTED.
0925        */
0926       T_rsc( ctx->status, RTEMS_NOT_IMPLEMENTED );
0927       break;
0928     }
0929 
0930     case RtemsTaskReqMode_Post_Status_NotImplIntLvlSMP: {
0931       /*
0932        * Where the system needs inter-processor interrupts, the return status
0933        * of rtems_task_mode() shall be RTEMS_NOT_IMPLEMENTED.
0934        *
0935        * Where the system does not need inter-processor interrupts, the return
0936        * status of rtems_task_mode() shall be RTEMS_SUCCESSFUL.
0937        */
0938       if ( rtems_configuration_get_maximum_processors() > 1 ) {
0939         T_rsc( ctx->status, RTEMS_NOT_IMPLEMENTED );
0940       } else {
0941         T_rsc_success( ctx->status );
0942       }
0943       break;
0944     }
0945 
0946     case RtemsTaskReqMode_Post_Status_NotImplNoPreempt: {
0947       /*
0948        * Where the scheduler does not support the no-preempt mode, the return
0949        * status of rtems_task_mode() shall be RTEMS_NOT_IMPLEMENTED.
0950        *
0951        * Where the scheduler does support the no-preempt mode, the return
0952        * status of rtems_task_mode() shall be RTEMS_SUCCESSFUL.
0953        */
0954       if ( rtems_configuration_get_maximum_processors() > 1 ) {
0955         T_rsc( ctx->status, RTEMS_NOT_IMPLEMENTED );
0956       } else {
0957         T_rsc_success( ctx->status );
0958       }
0959       break;
0960     }
0961 
0962     case RtemsTaskReqMode_Post_Status_NA:
0963       break;
0964   }
0965 }
0966 
0967 static void RtemsTaskReqMode_Post_Preempt_Check(
0968   RtemsTaskReqMode_Context     *ctx,
0969   RtemsTaskReqMode_Post_Preempt state
0970 )
0971 {
0972   switch ( state ) {
0973     case RtemsTaskReqMode_Post_Preempt_Yes: {
0974       /*
0975        * The calling task shall be preempted by a higher priority ready task
0976        * during the rtems_task_mode() call.
0977        */
0978       T_eq_u32( ctx->worker_counter_after, ctx->worker_counter_before + 1 );
0979       break;
0980     }
0981 
0982     case RtemsTaskReqMode_Post_Preempt_No: {
0983       /*
0984        * The calling task shall not be preempted during the rtems_task_mode()
0985        * call.
0986        */
0987       T_eq_u32( ctx->worker_counter_after, ctx->worker_counter_before );
0988       break;
0989     }
0990 
0991     case RtemsTaskReqMode_Post_Preempt_Maybe: {
0992       /*
0993        * Where the scheduler does not support the no-preempt mode, the calling
0994        * task shall not be preempted during the rtems_task_mode() call.
0995        *
0996        * Where the scheduler does support the no-preempt mode, the calling task
0997        * shall be preempted by a higher priority ready task during the
0998        * rtems_task_mode() call.
0999        */
1000       if ( rtems_configuration_get_maximum_processors() > 1 ) {
1001         T_eq_u32( ctx->worker_counter_after, ctx->worker_counter_before );
1002       } else {
1003         T_eq_u32( ctx->worker_counter_after, ctx->worker_counter_before + 1 );
1004       }
1005       break;
1006     }
1007 
1008     case RtemsTaskReqMode_Post_Preempt_NA:
1009       break;
1010   }
1011 }
1012 
1013 static void RtemsTaskReqMode_Post_ASR_Check(
1014   RtemsTaskReqMode_Context *ctx,
1015   RtemsTaskReqMode_Post_ASR state
1016 )
1017 {
1018   switch ( state ) {
1019     case RtemsTaskReqMode_Post_ASR_Yes: {
1020       /*
1021        * The calling task shall process pending signals during the
1022        * rtems_task_mode() call.
1023        */
1024       T_eq_u32( ctx->signal_counter_after, ctx->signal_counter_before + 1 );
1025       break;
1026     }
1027 
1028     case RtemsTaskReqMode_Post_ASR_No: {
1029       /*
1030        * The calling task shall not process signals during the
1031        * rtems_task_mode() call.
1032        */
1033       T_eq_u32( ctx->signal_counter_after, ctx->signal_counter_before );
1034       break;
1035     }
1036 
1037     case RtemsTaskReqMode_Post_ASR_Maybe: {
1038       /*
1039        * Where the scheduler does not support the no-preempt mode, the calling
1040        * task shall not process signals during the rtems_task_mode() call.
1041        *
1042        * Where the scheduler does support the no-preempt mode, the calling task
1043        * shall process pending signals during the rtems_task_mode() call.
1044        */
1045       if ( rtems_configuration_get_maximum_processors() > 1 ) {
1046         T_eq_u32( ctx->signal_counter_after, ctx->signal_counter_before );
1047       } else {
1048         T_eq_u32( ctx->signal_counter_after, ctx->signal_counter_before + 1 );
1049       }
1050       break;
1051     }
1052 
1053     case RtemsTaskReqMode_Post_ASR_NA:
1054       break;
1055   }
1056 }
1057 
1058 static void RtemsTaskReqMode_Post_PMVar_Check(
1059   RtemsTaskReqMode_Context   *ctx,
1060   RtemsTaskReqMode_Post_PMVar state
1061 )
1062 {
1063   switch ( state ) {
1064     case RtemsTaskReqMode_Post_PMVar_Set: {
1065       /*
1066        * The value of the object referenced by the ``previous_mode_set``
1067        * parameter shall be set to the task modes of the calling task on entry
1068        * of the call to rtems_task_mode().
1069        */
1070       T_eq_ptr( ctx->previous_mode_set, &ctx->previous_mode_set_value );
1071       T_eq_u32( ctx->previous_mode_set_value, ctx->current_mode );
1072       break;
1073     }
1074 
1075     case RtemsTaskReqMode_Post_PMVar_Nop: {
1076       /*
1077        * Objects referenced by the ``stack_size`` parameter in past calls to
1078        * rtems_task_mode() shall not be accessed by the rtems_task_mode() call.
1079        */
1080       T_eq_u32( ctx->previous_mode_set_value, INVALID_MODE );
1081       break;
1082     }
1083 
1084     case RtemsTaskReqMode_Post_PMVar_Maybe: {
1085       /*
1086        * Where the scheduler does not support the no-preempt mode, objects
1087        * referenced by the ``stack_size`` parameter in past calls to
1088        * rtems_task_mode() shall not be accessed by the rtems_task_mode() call.
1089        *
1090        * Where the scheduler does support the no-preempt mode, the value of the
1091        * object referenced by the ``previous_mode_set`` parameter shall be set
1092        * to the task modes of the calling task on entry of the call to
1093        * rtems_task_mode().
1094        */
1095       T_eq_ptr( ctx->previous_mode_set, &ctx->previous_mode_set_value );
1096 
1097       if ( rtems_configuration_get_maximum_processors() > 1 ) {
1098         T_eq_u32( ctx->previous_mode_set_value, INVALID_MODE );
1099       } else {
1100         T_eq_u32( ctx->previous_mode_set_value, ctx->current_mode );
1101       }
1102       break;
1103     }
1104 
1105     case RtemsTaskReqMode_Post_PMVar_NA:
1106       break;
1107   }
1108 }
1109 
1110 static void RtemsTaskReqMode_Post_Mode_Check(
1111   RtemsTaskReqMode_Context  *ctx,
1112   RtemsTaskReqMode_Post_Mode state
1113 )
1114 {
1115   switch ( state ) {
1116     case RtemsTaskReqMode_Post_Mode_Set: {
1117       /*
1118        * The task modes of the calling task indicated by the ``mask`` parameter
1119        * shall be set to the corrsponding modes specified by the ``mode_set``
1120        * parameter.
1121        */
1122       CheckMode( ctx, ctx->current_mode, ctx->mode_mask, ctx->mode_set );
1123       break;
1124     }
1125 
1126     case RtemsTaskReqMode_Post_Mode_Nop: {
1127       /*
1128        * The task modes of the calling task shall not be modified by the
1129        * rtems_task_mode() call.
1130        */
1131       CheckMode( ctx, ctx->current_mode, 0, 0 );
1132       break;
1133     }
1134 
1135     case RtemsTaskReqMode_Post_Mode_Maybe: {
1136       /*
1137        * Where the scheduler does not support the no-preempt mode, the task
1138        * modes of the calling task shall not be modified by the
1139        * rtems_task_mode() call.
1140        *
1141        * Where the scheduler does support the no-preempt mode, the task modes
1142        * of the calling task indicated by the ``mask`` parameter shall be set
1143        * to the corrsponding modes specified by the ``mode_set`` parameter.
1144        */
1145       if ( rtems_configuration_get_maximum_processors() > 1 ) {
1146         CheckMode( ctx, ctx->current_mode, 0, 0 );
1147       } else {
1148         CheckMode( ctx, ctx->current_mode, ctx->mode_mask, ctx->mode_set );
1149       }
1150       break;
1151     }
1152 
1153     case RtemsTaskReqMode_Post_Mode_NA:
1154       break;
1155   }
1156 }
1157 
1158 static void RtemsTaskReqMode_Setup( RtemsTaskReqMode_Context *ctx )
1159 {
1160   rtems_status_code sc;
1161 
1162   memset( ctx, 0, sizeof( *ctx ) );
1163 
1164   sc = rtems_task_mode(
1165     RTEMS_DEFAULT_MODES,
1166     RTEMS_CURRENT_MODE,
1167     &ctx->runner_mode
1168   );
1169   T_rsc_success( sc );
1170 
1171   SetSelfPriority( PRIO_NORMAL );
1172   ctx->worker_id = CreateTask( "WORK", PRIO_HIGH );
1173   StartTask( ctx->worker_id, Worker, ctx );
1174 }
1175 
1176 static void RtemsTaskReqMode_Setup_Wrap( void *arg )
1177 {
1178   RtemsTaskReqMode_Context *ctx;
1179 
1180   ctx = arg;
1181   ctx->Map.in_action_loop = false;
1182   RtemsTaskReqMode_Setup( ctx );
1183 }
1184 
1185 static void RtemsTaskReqMode_Teardown( RtemsTaskReqMode_Context *ctx )
1186 {
1187   DeleteTask( ctx->worker_id );
1188   RestoreRunnerMode();
1189   RestoreRunnerPriority();
1190 }
1191 
1192 static void RtemsTaskReqMode_Teardown_Wrap( void *arg )
1193 {
1194   RtemsTaskReqMode_Context *ctx;
1195 
1196   ctx = arg;
1197   ctx->Map.in_action_loop = false;
1198   RtemsTaskReqMode_Teardown( ctx );
1199 }
1200 
1201 static void RtemsTaskReqMode_Prepare( RtemsTaskReqMode_Context *ctx )
1202 {
1203   ctx->current_mode = RTEMS_DEFAULT_MODES;
1204   ctx->mode_set = RTEMS_DEFAULT_MODES;
1205   ctx->mode_mask = RTEMS_CURRENT_MODE;
1206   ctx->previous_mode_set_value = INVALID_MODE;
1207 }
1208 
1209 static void RtemsTaskReqMode_Action( RtemsTaskReqMode_Context *ctx )
1210 {
1211   rtems_status_code sc;
1212   rtems_mode        mode;
1213 
1214   sc = rtems_task_mode( ctx->current_mode, RTEMS_ALL_MODE_MASKS, &mode );
1215   T_rsc_success( sc );
1216 
1217   SendEvents( ctx->worker_id, EVENT_MAKE_READY );
1218 
1219   sc = rtems_signal_catch( SignalHandler, ctx->current_mode | RTEMS_NO_ASR );
1220   T_rsc_success( sc );
1221 
1222   sc = rtems_signal_send( RTEMS_SELF, 0xdeadbeef );
1223   T_rsc_success( sc );
1224 
1225   ctx->worker_counter_before = ctx->worker_counter;
1226   ctx->signal_counter_before = ctx->signal_counter;
1227   ctx->status = rtems_task_mode(
1228     ctx->mode_set,
1229     ctx->mode_mask,
1230     ctx->previous_mode_set
1231   );
1232   ctx->worker_counter_after = ctx->worker_counter;
1233   ctx->signal_counter_after = ctx->signal_counter;
1234 }
1235 
1236 static void RtemsTaskReqMode_Cleanup( RtemsTaskReqMode_Context *ctx )
1237 {
1238   rtems_status_code sc;
1239   rtems_mode        mode;
1240 
1241   sc = rtems_task_mode( RTEMS_DEFAULT_MODES, RTEMS_ALL_MODE_MASKS, &mode );
1242   T_rsc_success( sc );
1243 
1244   sc = rtems_task_wake_after( RTEMS_YIELD_PROCESSOR );
1245   T_rsc_success( sc );
1246 
1247   sc = rtems_signal_catch( NULL, RTEMS_DEFAULT_MODES );
1248   T_rsc_success( sc );
1249 }
1250 
1251 static const RtemsTaskReqMode_Entry
1252 RtemsTaskReqMode_Entries[] = {
1253   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1254     RtemsTaskReqMode_Post_Status_InvAddr, RtemsTaskReqMode_Post_Preempt_No,
1255     RtemsTaskReqMode_Post_ASR_No, RtemsTaskReqMode_Post_PMVar_Nop,
1256     RtemsTaskReqMode_Post_Mode_Nop },
1257 #if CPU_ENABLE_ROBUST_THREAD_DISPATCH == TRUE
1258   { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_NA,
1259     RtemsTaskReqMode_Post_Preempt_NA, RtemsTaskReqMode_Post_ASR_NA,
1260     RtemsTaskReqMode_Post_PMVar_NA, RtemsTaskReqMode_Post_Mode_NA },
1261 #else
1262   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1263     RtemsTaskReqMode_Post_Status_InvAddr, RtemsTaskReqMode_Post_Preempt_No,
1264     RtemsTaskReqMode_Post_ASR_No, RtemsTaskReqMode_Post_PMVar_Nop,
1265     RtemsTaskReqMode_Post_Mode_Nop },
1266 #endif
1267   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1268     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_No,
1269     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set },
1270 #if CPU_ENABLE_ROBUST_THREAD_DISPATCH == TRUE
1271   { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_NA,
1272     RtemsTaskReqMode_Post_Preempt_NA, RtemsTaskReqMode_Post_ASR_NA,
1273     RtemsTaskReqMode_Post_PMVar_NA, RtemsTaskReqMode_Post_Mode_NA },
1274 #else
1275   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1276     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_No,
1277     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set },
1278 #endif
1279 #if CPU_ENABLE_ROBUST_THREAD_DISPATCH == TRUE
1280   { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_NA,
1281     RtemsTaskReqMode_Post_Preempt_NA, RtemsTaskReqMode_Post_ASR_NA,
1282     RtemsTaskReqMode_Post_PMVar_NA, RtemsTaskReqMode_Post_Mode_NA },
1283 #elif defined(RTEMS_SMP)
1284   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1285     RtemsTaskReqMode_Post_Status_NotImplNoPreempt,
1286     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_No,
1287     RtemsTaskReqMode_Post_PMVar_Maybe, RtemsTaskReqMode_Post_Mode_Maybe },
1288 #else
1289   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1290     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_No,
1291     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set },
1292 #endif
1293 #if defined(RTEMS_SMP)
1294   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1295     RtemsTaskReqMode_Post_Status_NotImplNoPreempt,
1296     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_No,
1297     RtemsTaskReqMode_Post_PMVar_Maybe, RtemsTaskReqMode_Post_Mode_Maybe },
1298 #else
1299   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1300     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_No,
1301     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set },
1302 #endif
1303 #if CPU_ENABLE_ROBUST_THREAD_DISPATCH == TRUE
1304   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1305     RtemsTaskReqMode_Post_Status_NotImplIntLvl,
1306     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_No,
1307     RtemsTaskReqMode_Post_PMVar_Nop, RtemsTaskReqMode_Post_Mode_Nop },
1308 #elif defined(RTEMS_SMP)
1309   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1310     RtemsTaskReqMode_Post_Status_NotImplIntLvlSMP,
1311     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_No,
1312     RtemsTaskReqMode_Post_PMVar_Maybe, RtemsTaskReqMode_Post_Mode_Maybe },
1313 #else
1314   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1315     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_No,
1316     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set },
1317 #endif
1318 #if CPU_ENABLE_ROBUST_THREAD_DISPATCH == TRUE
1319   { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_NA,
1320     RtemsTaskReqMode_Post_Preempt_NA, RtemsTaskReqMode_Post_ASR_NA,
1321     RtemsTaskReqMode_Post_PMVar_NA, RtemsTaskReqMode_Post_Mode_NA },
1322 #elif defined(RTEMS_SMP)
1323   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1324     RtemsTaskReqMode_Post_Status_NotImplIntLvlSMP,
1325     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_No,
1326     RtemsTaskReqMode_Post_PMVar_Maybe, RtemsTaskReqMode_Post_Mode_Maybe },
1327 #else
1328   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1329     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_No,
1330     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set },
1331 #endif
1332 #if defined(RTEMS_SMP)
1333   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1334     RtemsTaskReqMode_Post_Preempt_Maybe, RtemsTaskReqMode_Post_ASR_No,
1335     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set },
1336 #else
1337   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1338     RtemsTaskReqMode_Post_Preempt_Yes, RtemsTaskReqMode_Post_ASR_No,
1339     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set },
1340 #endif
1341 #if CPU_ENABLE_ROBUST_THREAD_DISPATCH == TRUE
1342   { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_NA,
1343     RtemsTaskReqMode_Post_Preempt_NA, RtemsTaskReqMode_Post_ASR_NA,
1344     RtemsTaskReqMode_Post_PMVar_NA, RtemsTaskReqMode_Post_Mode_NA },
1345 #elif defined(RTEMS_SMP)
1346   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1347     RtemsTaskReqMode_Post_Preempt_Maybe, RtemsTaskReqMode_Post_ASR_No,
1348     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set },
1349 #else
1350   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1351     RtemsTaskReqMode_Post_Preempt_Yes, RtemsTaskReqMode_Post_ASR_No,
1352     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set },
1353 #endif
1354   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1355     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_Yes,
1356     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set },
1357 #if CPU_ENABLE_ROBUST_THREAD_DISPATCH == TRUE
1358   { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_NA,
1359     RtemsTaskReqMode_Post_Preempt_NA, RtemsTaskReqMode_Post_ASR_NA,
1360     RtemsTaskReqMode_Post_PMVar_NA, RtemsTaskReqMode_Post_Mode_NA },
1361 #else
1362   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1363     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_Yes,
1364     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set },
1365 #endif
1366 #if CPU_ENABLE_ROBUST_THREAD_DISPATCH == TRUE
1367   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1368     RtemsTaskReqMode_Post_Status_NotImplIntLvl,
1369     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_No,
1370     RtemsTaskReqMode_Post_PMVar_Nop, RtemsTaskReqMode_Post_Mode_Nop },
1371 #elif defined(RTEMS_SMP)
1372   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1373     RtemsTaskReqMode_Post_Status_NotImplNoPreempt,
1374     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_No,
1375     RtemsTaskReqMode_Post_PMVar_Maybe, RtemsTaskReqMode_Post_Mode_Maybe },
1376 #else
1377   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1378     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_No,
1379     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set },
1380 #endif
1381 #if CPU_ENABLE_ROBUST_THREAD_DISPATCH == TRUE
1382   { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_NA,
1383     RtemsTaskReqMode_Post_Preempt_NA, RtemsTaskReqMode_Post_ASR_NA,
1384     RtemsTaskReqMode_Post_PMVar_NA, RtemsTaskReqMode_Post_Mode_NA },
1385 #elif defined(RTEMS_SMP)
1386   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1387     RtemsTaskReqMode_Post_Status_NotImplNoPreempt,
1388     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_Maybe,
1389     RtemsTaskReqMode_Post_PMVar_Maybe, RtemsTaskReqMode_Post_Mode_Maybe },
1390 #else
1391   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1392     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_Yes,
1393     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set },
1394 #endif
1395 #if CPU_ENABLE_ROBUST_THREAD_DISPATCH == TRUE
1396   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1397     RtemsTaskReqMode_Post_Status_NotImplIntLvl,
1398     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_No,
1399     RtemsTaskReqMode_Post_PMVar_Nop, RtemsTaskReqMode_Post_Mode_Nop },
1400 #elif defined(RTEMS_SMP)
1401   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1402     RtemsTaskReqMode_Post_Status_NotImplIntLvlSMP,
1403     RtemsTaskReqMode_Post_Preempt_Maybe, RtemsTaskReqMode_Post_ASR_No,
1404     RtemsTaskReqMode_Post_PMVar_Maybe, RtemsTaskReqMode_Post_Mode_Maybe },
1405 #else
1406   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1407     RtemsTaskReqMode_Post_Preempt_Yes, RtemsTaskReqMode_Post_ASR_No,
1408     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set },
1409 #endif
1410 #if CPU_ENABLE_ROBUST_THREAD_DISPATCH == TRUE
1411   { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_NA,
1412     RtemsTaskReqMode_Post_Preempt_NA, RtemsTaskReqMode_Post_ASR_NA,
1413     RtemsTaskReqMode_Post_PMVar_NA, RtemsTaskReqMode_Post_Mode_NA },
1414 #elif defined(RTEMS_SMP)
1415   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1416     RtemsTaskReqMode_Post_Status_NotImplIntLvlSMP,
1417     RtemsTaskReqMode_Post_Preempt_Maybe, RtemsTaskReqMode_Post_ASR_No,
1418     RtemsTaskReqMode_Post_PMVar_Maybe, RtemsTaskReqMode_Post_Mode_Maybe },
1419 #else
1420   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1421     RtemsTaskReqMode_Post_Preempt_Yes, RtemsTaskReqMode_Post_ASR_No,
1422     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set },
1423 #endif
1424 #if defined(RTEMS_SMP)
1425   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1426     RtemsTaskReqMode_Post_Status_NotImplNoPreempt,
1427     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_Maybe,
1428     RtemsTaskReqMode_Post_PMVar_Maybe, RtemsTaskReqMode_Post_Mode_Maybe },
1429 #else
1430   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1431     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_Yes,
1432     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set },
1433 #endif
1434 #if CPU_ENABLE_ROBUST_THREAD_DISPATCH == TRUE
1435   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1436     RtemsTaskReqMode_Post_Status_NotImplIntLvl,
1437     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_No,
1438     RtemsTaskReqMode_Post_PMVar_Nop, RtemsTaskReqMode_Post_Mode_Nop },
1439 #elif defined(RTEMS_SMP)
1440   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1441     RtemsTaskReqMode_Post_Status_NotImplIntLvlSMP,
1442     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_Maybe,
1443     RtemsTaskReqMode_Post_PMVar_Maybe, RtemsTaskReqMode_Post_Mode_Maybe },
1444 #else
1445   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1446     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_Yes,
1447     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set },
1448 #endif
1449 #if CPU_ENABLE_ROBUST_THREAD_DISPATCH == TRUE
1450   { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_NA,
1451     RtemsTaskReqMode_Post_Preempt_NA, RtemsTaskReqMode_Post_ASR_NA,
1452     RtemsTaskReqMode_Post_PMVar_NA, RtemsTaskReqMode_Post_Mode_NA },
1453 #elif defined(RTEMS_SMP)
1454   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1455     RtemsTaskReqMode_Post_Status_NotImplIntLvlSMP,
1456     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_Maybe,
1457     RtemsTaskReqMode_Post_PMVar_Maybe, RtemsTaskReqMode_Post_Mode_Maybe },
1458 #else
1459   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1460     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_Yes,
1461     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set },
1462 #endif
1463 #if defined(RTEMS_SMP)
1464   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1465     RtemsTaskReqMode_Post_Preempt_Maybe, RtemsTaskReqMode_Post_ASR_Yes,
1466     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set },
1467 #else
1468   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1469     RtemsTaskReqMode_Post_Preempt_Yes, RtemsTaskReqMode_Post_ASR_Yes,
1470     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set },
1471 #endif
1472 #if CPU_ENABLE_ROBUST_THREAD_DISPATCH == TRUE
1473   { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_NA,
1474     RtemsTaskReqMode_Post_Preempt_NA, RtemsTaskReqMode_Post_ASR_NA,
1475     RtemsTaskReqMode_Post_PMVar_NA, RtemsTaskReqMode_Post_Mode_NA },
1476 #elif defined(RTEMS_SMP)
1477   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1478     RtemsTaskReqMode_Post_Preempt_Maybe, RtemsTaskReqMode_Post_ASR_Yes,
1479     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set },
1480 #else
1481   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1482     RtemsTaskReqMode_Post_Preempt_Yes, RtemsTaskReqMode_Post_ASR_Yes,
1483     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set },
1484 #endif
1485 #if CPU_ENABLE_ROBUST_THREAD_DISPATCH == TRUE
1486   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1487     RtemsTaskReqMode_Post_Status_NotImplIntLvl,
1488     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_No,
1489     RtemsTaskReqMode_Post_PMVar_Nop, RtemsTaskReqMode_Post_Mode_Nop },
1490 #elif defined(RTEMS_SMP)
1491   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1492     RtemsTaskReqMode_Post_Status_NotImplNoPreempt,
1493     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_Maybe,
1494     RtemsTaskReqMode_Post_PMVar_Maybe, RtemsTaskReqMode_Post_Mode_Maybe },
1495 #else
1496   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1497     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_Yes,
1498     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set },
1499 #endif
1500 #if CPU_ENABLE_ROBUST_THREAD_DISPATCH == TRUE
1501   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1502     RtemsTaskReqMode_Post_Status_NotImplIntLvl,
1503     RtemsTaskReqMode_Post_Preempt_No, RtemsTaskReqMode_Post_ASR_No,
1504     RtemsTaskReqMode_Post_PMVar_Nop, RtemsTaskReqMode_Post_Mode_Nop },
1505 #elif defined(RTEMS_SMP)
1506   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1507     RtemsTaskReqMode_Post_Status_NotImplIntLvlSMP,
1508     RtemsTaskReqMode_Post_Preempt_Maybe, RtemsTaskReqMode_Post_ASR_Maybe,
1509     RtemsTaskReqMode_Post_PMVar_Maybe, RtemsTaskReqMode_Post_Mode_Maybe },
1510 #else
1511   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1512     RtemsTaskReqMode_Post_Preempt_Yes, RtemsTaskReqMode_Post_ASR_Yes,
1513     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set },
1514 #endif
1515 #if CPU_ENABLE_ROBUST_THREAD_DISPATCH == TRUE
1516   { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_NA,
1517     RtemsTaskReqMode_Post_Preempt_NA, RtemsTaskReqMode_Post_ASR_NA,
1518     RtemsTaskReqMode_Post_PMVar_NA, RtemsTaskReqMode_Post_Mode_NA }
1519 #elif defined(RTEMS_SMP)
1520   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1521     RtemsTaskReqMode_Post_Status_NotImplIntLvlSMP,
1522     RtemsTaskReqMode_Post_Preempt_Maybe, RtemsTaskReqMode_Post_ASR_Maybe,
1523     RtemsTaskReqMode_Post_PMVar_Maybe, RtemsTaskReqMode_Post_Mode_Maybe }
1524 #else
1525   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, RtemsTaskReqMode_Post_Status_Ok,
1526     RtemsTaskReqMode_Post_Preempt_Yes, RtemsTaskReqMode_Post_ASR_Yes,
1527     RtemsTaskReqMode_Post_PMVar_Set, RtemsTaskReqMode_Post_Mode_Set }
1528 #endif
1529 };
1530 
1531 static const uint8_t
1532 RtemsTaskReqMode_Map[] = {
1533   2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2,
1534   6, 2, 6, 2, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 2, 6, 2,
1535   6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1536   2, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1537   2, 2, 2, 2, 2, 2, 2, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 5, 5,
1538   5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 12, 5, 12, 5, 12, 5, 12, 5, 6, 2,
1539   6, 2, 6, 2, 6, 2, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 12, 5, 12,
1540   5, 12, 5, 12, 5, 6, 2, 6, 2, 6, 2, 6, 2, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2,
1541   2, 2, 2, 2, 12, 5, 12, 5, 12, 5, 12, 5, 6, 2, 6, 2, 6, 2, 6, 2, 5, 5, 5, 5,
1542   5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 12, 5, 12, 5, 12, 5, 12, 5, 6, 2, 6, 2,
1543   6, 2, 6, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 7, 3, 7, 3,
1544   7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
1545   7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
1546   3, 3, 3, 3, 3, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 3, 3, 3, 3,
1547   3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3,
1548   7, 3, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
1549   7, 3, 7, 3, 7, 3, 7, 3, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4,
1550   4, 4, 4, 4, 4, 4, 7, 3, 7, 3, 7, 3, 7, 3, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3,
1551   3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 7, 3, 7, 3, 7, 3, 7, 3, 4, 4, 4, 4, 4, 4,
1552   4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 7, 3, 7, 3, 7, 3, 7, 3,
1553   10, 10, 2, 2, 10, 10, 2, 2, 10, 10, 2, 2, 10, 10, 2, 2, 17, 10, 6, 2, 17, 10,
1554   6, 2, 17, 10, 6, 2, 17, 10, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1555   2, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 10, 10, 2, 2, 10, 10,
1556   2, 2, 10, 10, 2, 2, 10, 10, 2, 2, 17, 10, 6, 2, 17, 10, 6, 2, 17, 10, 6, 2,
1557   17, 10, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 2, 6, 2, 6,
1558   2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 16, 16, 5, 5, 16, 16, 5, 5, 10, 10, 2, 2,
1559   10, 10, 2, 2, 21, 16, 12, 5, 21, 16, 12, 5, 17, 10, 6, 2, 17, 10, 6, 2, 5, 5,
1560   5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 12, 5, 12, 5, 12, 5, 12, 5, 6, 2,
1561   6, 2, 6, 2, 6, 2, 16, 16, 5, 5, 16, 16, 5, 5, 10, 10, 2, 2, 10, 10, 2, 2, 21,
1562   16, 12, 5, 21, 16, 12, 5, 17, 10, 6, 2, 17, 10, 6, 2, 5, 5, 5, 5, 5, 5, 5, 5,
1563   2, 2, 2, 2, 2, 2, 2, 2, 12, 5, 12, 5, 12, 5, 12, 5, 6, 2, 6, 2, 6, 2, 6, 2,
1564   11, 11, 3, 3, 11, 11, 3, 3, 11, 11, 3, 3, 11, 11, 3, 3, 18, 11, 7, 3, 18, 11,
1565   7, 3, 18, 11, 7, 3, 18, 11, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
1566   3, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 11, 11, 3, 3, 11, 11,
1567   3, 3, 11, 11, 3, 3, 11, 11, 3, 3, 18, 11, 7, 3, 18, 11, 7, 3, 18, 11, 7, 3,
1568   18, 11, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 7, 3, 7,
1569   3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 13, 13, 4, 4, 13, 13, 4, 4, 11, 11, 3, 3,
1570   11, 11, 3, 3, 13, 13, 4, 4, 13, 13, 4, 4, 18, 11, 7, 3, 18, 11, 7, 3, 4, 4,
1571   4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 7, 3, 7, 3,
1572   7, 3, 7, 3, 13, 13, 4, 4, 13, 13, 4, 4, 11, 11, 3, 3, 11, 11, 3, 3, 13, 13,
1573   4, 4, 13, 13, 4, 4, 18, 11, 7, 3, 18, 11, 7, 3, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3,
1574   3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 7, 3, 7, 3, 7, 3, 7, 3, 2, 2, 2, 2,
1575   2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2,
1576   6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 2, 6, 2, 6, 2, 6, 2,
1577   6, 2, 6, 2, 6, 2, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 2,
1578   6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1579   2, 2, 2, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 5, 5, 5, 5, 5, 5,
1580   5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 12, 5, 12, 5, 12, 5, 12, 5, 6, 2, 6, 2, 6, 2,
1581   6, 2, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 12, 5, 12, 5, 12, 5,
1582   12, 5, 6, 2, 6, 2, 6, 2, 6, 2, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2,
1583   2, 12, 5, 12, 5, 12, 5, 12, 5, 6, 2, 6, 2, 6, 2, 6, 2, 5, 5, 5, 5, 5, 5, 5,
1584   5, 2, 2, 2, 2, 2, 2, 2, 2, 12, 5, 12, 5, 12, 5, 12, 5, 6, 2, 6, 2, 6, 2, 6,
1585   2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7,
1586   3, 7, 3, 7, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 7,
1587   3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
1588   3, 3, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3,
1589   3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 4,
1590   4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 7, 3, 7,
1591   3, 7, 3, 7, 3, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4,
1592   4, 4, 4, 7, 3, 7, 3, 7, 3, 7, 3, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3,
1593   3, 4, 4, 4, 4, 4, 4, 4, 4, 7, 3, 7, 3, 7, 3, 7, 3, 4, 4, 4, 4, 4, 4, 4, 4, 3,
1594   3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 7, 3, 7, 3, 7, 3, 7, 3, 10, 10,
1595   2, 2, 10, 10, 2, 2, 10, 10, 2, 2, 10, 10, 2, 2, 17, 10, 6, 2, 17, 10, 6, 2,
1596   17, 10, 6, 2, 17, 10, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1597   6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 10, 10, 2, 2, 10, 10, 2, 2,
1598   10, 10, 2, 2, 10, 10, 2, 2, 17, 10, 6, 2, 17, 10, 6, 2, 17, 10, 6, 2, 17, 10,
1599   6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 2, 6, 2, 6, 2, 6, 2,
1600   6, 2, 6, 2, 6, 2, 6, 2, 16, 16, 5, 5, 16, 16, 5, 5, 10, 10, 2, 2, 10, 10, 2,
1601   2, 21, 16, 12, 5, 21, 16, 12, 5, 17, 10, 6, 2, 17, 10, 6, 2, 5, 5, 5, 5, 5,
1602   5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 12, 5, 12, 5, 12, 5, 12, 5, 6, 2, 6, 2, 6,
1603   2, 6, 2, 16, 16, 5, 5, 16, 16, 5, 5, 10, 10, 2, 2, 10, 10, 2, 2, 21, 16, 12,
1604   5, 21, 16, 12, 5, 17, 10, 6, 2, 17, 10, 6, 2, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2,
1605   2, 2, 2, 2, 2, 2, 12, 5, 12, 5, 12, 5, 12, 5, 6, 2, 6, 2, 6, 2, 6, 2, 11, 11,
1606   3, 3, 11, 11, 3, 3, 11, 11, 3, 3, 11, 11, 3, 3, 18, 11, 7, 3, 18, 11, 7, 3,
1607   18, 11, 7, 3, 18, 11, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
1608   7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 11, 11, 3, 3, 11, 11, 3, 3,
1609   11, 11, 3, 3, 11, 11, 3, 3, 18, 11, 7, 3, 18, 11, 7, 3, 18, 11, 7, 3, 18, 11,
1610   7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 7, 3, 7, 3, 7, 3,
1611   7, 3, 7, 3, 7, 3, 7, 3, 13, 13, 4, 4, 13, 13, 4, 4, 11, 11, 3, 3, 11, 11, 3,
1612   3, 13, 13, 4, 4, 13, 13, 4, 4, 18, 11, 7, 3, 18, 11, 7, 3, 4, 4, 4, 4, 4, 4,
1613   4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 7, 3, 7, 3, 7, 3, 7, 3,
1614   13, 13, 4, 4, 13, 13, 4, 4, 11, 11, 3, 3, 11, 11, 3, 3, 13, 13, 4, 4, 13, 13,
1615   4, 4, 18, 11, 7, 3, 18, 11, 7, 3, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3,
1616   3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 7, 3, 7, 3, 7, 3, 7, 3, 8, 8, 8, 8, 8, 8, 8, 8,
1617   2, 2, 2, 2, 2, 2, 2, 2, 14, 8, 14, 8, 14, 8, 14, 8, 6, 2, 6, 2, 6, 2, 6, 2,
1618   8, 8, 8, 8, 8, 8, 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 14, 8, 14, 8, 14, 8, 14, 8,
1619   6, 2, 6, 2, 6, 2, 6, 2, 8, 8, 8, 8, 8, 8, 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 14,
1620   8, 14, 8, 14, 8, 14, 8, 6, 2, 6, 2, 6, 2, 6, 2, 8, 8, 8, 8, 8, 8, 8, 8, 2, 2,
1621   2, 2, 2, 2, 2, 2, 14, 8, 14, 8, 14, 8, 14, 8, 6, 2, 6, 2, 6, 2, 6, 2, 5, 5,
1622   5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 12, 5, 12, 5, 12, 5, 12, 5, 6, 2,
1623   6, 2, 6, 2, 6, 2, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 12, 5, 12,
1624   5, 12, 5, 12, 5, 6, 2, 6, 2, 6, 2, 6, 2, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2,
1625   2, 2, 2, 2, 12, 5, 12, 5, 12, 5, 12, 5, 6, 2, 6, 2, 6, 2, 6, 2, 5, 5, 5, 5,
1626   5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 12, 5, 12, 5, 12, 5, 12, 5, 6, 2, 6, 2,
1627   6, 2, 6, 2, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 3, 3, 3, 3, 15, 9, 15, 9, 15,
1628   9, 15, 9, 7, 3, 7, 3, 7, 3, 7, 3, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 3, 3,
1629   3, 3, 15, 9, 15, 9, 15, 9, 15, 9, 7, 3, 7, 3, 7, 3, 7, 3, 9, 9, 9, 9, 9, 9,
1630   9, 9, 3, 3, 3, 3, 3, 3, 3, 3, 15, 9, 15, 9, 15, 9, 15, 9, 7, 3, 7, 3, 7, 3,
1631   7, 3, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 3, 3, 3, 3, 15, 9, 15, 9, 15, 9,
1632   15, 9, 7, 3, 7, 3, 7, 3, 7, 3, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3,
1633   3, 4, 4, 4, 4, 4, 4, 4, 4, 7, 3, 7, 3, 7, 3, 7, 3, 4, 4, 4, 4, 4, 4, 4, 4, 3,
1634   3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 7, 3, 7, 3, 7, 3, 7, 3, 4, 4, 4,
1635   4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 7, 3, 7, 3, 7,
1636   3, 7, 3, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4,
1637   4, 7, 3, 7, 3, 7, 3, 7, 3, 19, 19, 8, 8, 19, 19, 8, 8, 10, 10, 2, 2, 10, 10,
1638   2, 2, 22, 19, 14, 8, 22, 19, 14, 8, 17, 10, 6, 2, 17, 10, 6, 2, 8, 8, 8, 8,
1639   8, 8, 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 14, 8, 14, 8, 14, 8, 14, 8, 6, 2, 6, 2,
1640   6, 2, 6, 2, 19, 19, 8, 8, 19, 19, 8, 8, 10, 10, 2, 2, 10, 10, 2, 2, 22, 19,
1641   14, 8, 22, 19, 14, 8, 17, 10, 6, 2, 17, 10, 6, 2, 8, 8, 8, 8, 8, 8, 8, 8, 2,
1642   2, 2, 2, 2, 2, 2, 2, 14, 8, 14, 8, 14, 8, 14, 8, 6, 2, 6, 2, 6, 2, 6, 2, 16,
1643   16, 5, 5, 16, 16, 5, 5, 10, 10, 2, 2, 10, 10, 2, 2, 21, 16, 12, 5, 21, 16,
1644   12, 5, 17, 10, 6, 2, 17, 10, 6, 2, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2,
1645   2, 2, 12, 5, 12, 5, 12, 5, 12, 5, 6, 2, 6, 2, 6, 2, 6, 2, 16, 16, 5, 5, 16,
1646   16, 5, 5, 10, 10, 2, 2, 10, 10, 2, 2, 21, 16, 12, 5, 21, 16, 12, 5, 17, 10,
1647   6, 2, 17, 10, 6, 2, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 12, 5,
1648   12, 5, 12, 5, 12, 5, 6, 2, 6, 2, 6, 2, 6, 2, 20, 20, 9, 9, 20, 20, 9, 9, 11,
1649   11, 3, 3, 11, 11, 3, 3, 23, 20, 15, 9, 23, 20, 15, 9, 18, 11, 7, 3, 18, 11,
1650   7, 3, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 3, 3, 3, 3, 15, 9, 15, 9, 15, 9,
1651   15, 9, 7, 3, 7, 3, 7, 3, 7, 3, 20, 20, 9, 9, 20, 20, 9, 9, 11, 11, 3, 3, 11,
1652   11, 3, 3, 23, 20, 15, 9, 23, 20, 15, 9, 18, 11, 7, 3, 18, 11, 7, 3, 9, 9, 9,
1653   9, 9, 9, 9, 9, 3, 3, 3, 3, 3, 3, 3, 3, 15, 9, 15, 9, 15, 9, 15, 9, 7, 3, 7,
1654   3, 7, 3, 7, 3, 13, 13, 4, 4, 13, 13, 4, 4, 11, 11, 3, 3, 11, 11, 3, 3, 13,
1655   13, 4, 4, 13, 13, 4, 4, 18, 11, 7, 3, 18, 11, 7, 3, 4, 4, 4, 4, 4, 4, 4, 4,
1656   3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 7, 3, 7, 3, 7, 3, 7, 3, 13,
1657   13, 4, 4, 13, 13, 4, 4, 11, 11, 3, 3, 11, 11, 3, 3, 13, 13, 4, 4, 13, 13, 4,
1658   4, 18, 11, 7, 3, 18, 11, 7, 3, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3,
1659   3, 4, 4, 4, 4, 4, 4, 4, 4, 7, 3, 7, 3, 7, 3, 7, 3, 8, 8, 8, 8, 8, 8, 8, 8, 2,
1660   2, 2, 2, 2, 2, 2, 2, 14, 8, 14, 8, 14, 8, 14, 8, 6, 2, 6, 2, 6, 2, 6, 2, 8,
1661   8, 8, 8, 8, 8, 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 14, 8, 14, 8, 14, 8, 14, 8, 6,
1662   2, 6, 2, 6, 2, 6, 2, 8, 8, 8, 8, 8, 8, 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 14, 8,
1663   14, 8, 14, 8, 14, 8, 6, 2, 6, 2, 6, 2, 6, 2, 8, 8, 8, 8, 8, 8, 8, 8, 2, 2, 2,
1664   2, 2, 2, 2, 2, 14, 8, 14, 8, 14, 8, 14, 8, 6, 2, 6, 2, 6, 2, 6, 2, 5, 5, 5,
1665   5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 12, 5, 12, 5, 12, 5, 12, 5, 6, 2, 6,
1666   2, 6, 2, 6, 2, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 12, 5, 12, 5,
1667   12, 5, 12, 5, 6, 2, 6, 2, 6, 2, 6, 2, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2,
1668   2, 2, 2, 12, 5, 12, 5, 12, 5, 12, 5, 6, 2, 6, 2, 6, 2, 6, 2, 5, 5, 5, 5, 5,
1669   5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 12, 5, 12, 5, 12, 5, 12, 5, 6, 2, 6, 2, 6,
1670   2, 6, 2, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 3, 3, 3, 3, 15, 9, 15, 9, 15, 9,
1671   15, 9, 7, 3, 7, 3, 7, 3, 7, 3, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 3, 3, 3,
1672   3, 15, 9, 15, 9, 15, 9, 15, 9, 7, 3, 7, 3, 7, 3, 7, 3, 9, 9, 9, 9, 9, 9, 9,
1673   9, 3, 3, 3, 3, 3, 3, 3, 3, 15, 9, 15, 9, 15, 9, 15, 9, 7, 3, 7, 3, 7, 3, 7,
1674   3, 9, 9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 3, 3, 3, 3, 15, 9, 15, 9, 15, 9, 15,
1675   9, 7, 3, 7, 3, 7, 3, 7, 3, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 4,
1676   4, 4, 4, 4, 4, 4, 4, 7, 3, 7, 3, 7, 3, 7, 3, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3,
1677   3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 7, 3, 7, 3, 7, 3, 7, 3, 4, 4, 4, 4, 4,
1678   4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 7, 3, 7, 3, 7, 3, 7,
1679   3, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 7,
1680   3, 7, 3, 7, 3, 7, 3, 19, 19, 8, 8, 19, 19, 8, 8, 10, 10, 2, 2, 10, 10, 2, 2,
1681   22, 19, 14, 8, 22, 19, 14, 8, 17, 10, 6, 2, 17, 10, 6, 2, 8, 8, 8, 8, 8, 8,
1682   8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 14, 8, 14, 8, 14, 8, 14, 8, 6, 2, 6, 2, 6, 2,
1683   6, 2, 19, 19, 8, 8, 19, 19, 8, 8, 10, 10, 2, 2, 10, 10, 2, 2, 22, 19, 14, 8,
1684   22, 19, 14, 8, 17, 10, 6, 2, 17, 10, 6, 2, 8, 8, 8, 8, 8, 8, 8, 8, 2, 2, 2,
1685   2, 2, 2, 2, 2, 14, 8, 14, 8, 14, 8, 14, 8, 6, 2, 6, 2, 6, 2, 6, 2, 16, 16, 5,
1686   5, 16, 16, 5, 5, 10, 10, 2, 2, 10, 10, 2, 2, 21, 16, 12, 5, 21, 16, 12, 5,
1687   17, 10, 6, 2, 17, 10, 6, 2, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2,
1688   12, 5, 12, 5, 12, 5, 12, 5, 6, 2, 6, 2, 6, 2, 6, 2, 16, 16, 5, 5, 16, 16, 5,
1689   5, 10, 10, 2, 2, 10, 10, 2, 2, 21, 16, 12, 5, 21, 16, 12, 5, 17, 10, 6, 2,
1690   17, 10, 6, 2, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 12, 5, 12, 5,
1691   12, 5, 12, 5, 6, 2, 6, 2, 6, 2, 6, 2, 20, 20, 9, 9, 20, 20, 9, 9, 11, 11, 3,
1692   3, 11, 11, 3, 3, 23, 20, 15, 9, 23, 20, 15, 9, 18, 11, 7, 3, 18, 11, 7, 3, 9,
1693   9, 9, 9, 9, 9, 9, 9, 3, 3, 3, 3, 3, 3, 3, 3, 15, 9, 15, 9, 15, 9, 15, 9, 7,
1694   3, 7, 3, 7, 3, 7, 3, 20, 20, 9, 9, 20, 20, 9, 9, 11, 11, 3, 3, 11, 11, 3, 3,
1695   23, 20, 15, 9, 23, 20, 15, 9, 18, 11, 7, 3, 18, 11, 7, 3, 9, 9, 9, 9, 9, 9,
1696   9, 9, 3, 3, 3, 3, 3, 3, 3, 3, 15, 9, 15, 9, 15, 9, 15, 9, 7, 3, 7, 3, 7, 3,
1697   7, 3, 13, 13, 4, 4, 13, 13, 4, 4, 11, 11, 3, 3, 11, 11, 3, 3, 13, 13, 4, 4,
1698   13, 13, 4, 4, 18, 11, 7, 3, 18, 11, 7, 3, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3,
1699   3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 7, 3, 7, 3, 7, 3, 7, 3, 13, 13, 4, 4, 13,
1700   13, 4, 4, 11, 11, 3, 3, 11, 11, 3, 3, 13, 13, 4, 4, 13, 13, 4, 4, 18, 11, 7,
1701   3, 18, 11, 7, 3, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4,
1702   4, 4, 4, 4, 7, 3, 7, 3, 7, 3, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1703   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,
1704   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,
1705   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,
1706   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,
1707   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,
1708   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,
1709   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,
1710   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,
1711   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,
1712   0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1713   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1714   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1715   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1716   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1717   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1718   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1719   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1720   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1721   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1722   1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1723   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,
1724   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,
1725   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,
1726   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,
1727   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,
1728   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,
1729   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,
1730   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,
1731   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,
1732   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1733   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1734   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1735   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1736   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1737   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1738   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1739   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1740   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1741   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
1742   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,
1743   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,
1744   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,
1745   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,
1746   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,
1747   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,
1748   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,
1749   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,
1750   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,
1751   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
1752   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1753   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1754   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1755   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1756   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1757   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1758   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1759   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1760   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1761   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1762   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,
1763   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,
1764   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,
1765   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,
1766   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,
1767   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,
1768   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,
1769   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,
1770   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,
1771   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1772   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1773   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1774   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1775   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1776   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1777   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1778   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1779   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1780   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1781   1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1782   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,
1783   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,
1784   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,
1785   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,
1786   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,
1787   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,
1788   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,
1789   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,
1790   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,
1791   0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1792   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1793   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1794   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1795   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1796   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1797   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1798   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1799   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1800   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
1801   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,
1802   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,
1803   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,
1804   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,
1805   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,
1806   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,
1807   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,
1808   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,
1809   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,
1810   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
1811   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1812   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1813   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1814   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1815   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1816   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1817   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1818   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1819   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1820   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1821   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,
1822   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,
1823   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,
1824   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,
1825   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,
1826   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,
1827   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,
1828   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,
1829   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,
1830   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1831   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1832   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1833   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1834   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1835   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1836   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1837   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1838   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1839   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1840   1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1841   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,
1842   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,
1843   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,
1844   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,
1845   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,
1846   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,
1847   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,
1848   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,
1849   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,
1850   0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1851   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1852   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1853   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1854   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1855   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1856   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1857   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1858   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1859   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
1860 };
1861 
1862 static size_t RtemsTaskReqMode_Scope( void *arg, char *buf, size_t n )
1863 {
1864   RtemsTaskReqMode_Context *ctx;
1865 
1866   ctx = arg;
1867 
1868   if ( ctx->Map.in_action_loop ) {
1869     return T_get_scope( RtemsTaskReqMode_PreDesc, buf, n, ctx->Map.pcs );
1870   }
1871 
1872   return 0;
1873 }
1874 
1875 static T_fixture RtemsTaskReqMode_Fixture = {
1876   .setup = RtemsTaskReqMode_Setup_Wrap,
1877   .stop = NULL,
1878   .teardown = RtemsTaskReqMode_Teardown_Wrap,
1879   .scope = RtemsTaskReqMode_Scope,
1880   .initial_context = &RtemsTaskReqMode_Instance
1881 };
1882 
1883 static inline RtemsTaskReqMode_Entry RtemsTaskReqMode_PopEntry(
1884   RtemsTaskReqMode_Context *ctx
1885 )
1886 {
1887   size_t index;
1888 
1889   index = ctx->Map.index;
1890   ctx->Map.index = index + 1;
1891   return RtemsTaskReqMode_Entries[
1892     RtemsTaskReqMode_Map[ index ]
1893   ];
1894 }
1895 
1896 static void RtemsTaskReqMode_TestVariant( RtemsTaskReqMode_Context *ctx )
1897 {
1898   RtemsTaskReqMode_Pre_PrevMode_Prepare( ctx, ctx->Map.pcs[ 0 ] );
1899   RtemsTaskReqMode_Pre_PreemptCur_Prepare( ctx, ctx->Map.pcs[ 1 ] );
1900   RtemsTaskReqMode_Pre_TimesliceCur_Prepare( ctx, ctx->Map.pcs[ 2 ] );
1901   RtemsTaskReqMode_Pre_ASRCur_Prepare( ctx, ctx->Map.pcs[ 3 ] );
1902   RtemsTaskReqMode_Pre_IntLvlCur_Prepare( ctx, ctx->Map.pcs[ 4 ] );
1903   RtemsTaskReqMode_Pre_Preempt_Prepare( ctx, ctx->Map.pcs[ 5 ] );
1904   RtemsTaskReqMode_Pre_Timeslice_Prepare( ctx, ctx->Map.pcs[ 6 ] );
1905   RtemsTaskReqMode_Pre_ASR_Prepare( ctx, ctx->Map.pcs[ 7 ] );
1906   RtemsTaskReqMode_Pre_IntLvl_Prepare( ctx, ctx->Map.pcs[ 8 ] );
1907   RtemsTaskReqMode_Pre_PreemptMsk_Prepare( ctx, ctx->Map.pcs[ 9 ] );
1908   RtemsTaskReqMode_Pre_TimesliceMsk_Prepare( ctx, ctx->Map.pcs[ 10 ] );
1909   RtemsTaskReqMode_Pre_ASRMsk_Prepare( ctx, ctx->Map.pcs[ 11 ] );
1910   RtemsTaskReqMode_Pre_IntLvlMsk_Prepare( ctx, ctx->Map.pcs[ 12 ] );
1911   RtemsTaskReqMode_Action( ctx );
1912   RtemsTaskReqMode_Post_Status_Check( ctx, ctx->Map.entry.Post_Status );
1913   RtemsTaskReqMode_Post_Preempt_Check( ctx, ctx->Map.entry.Post_Preempt );
1914   RtemsTaskReqMode_Post_ASR_Check( ctx, ctx->Map.entry.Post_ASR );
1915   RtemsTaskReqMode_Post_PMVar_Check( ctx, ctx->Map.entry.Post_PMVar );
1916   RtemsTaskReqMode_Post_Mode_Check( ctx, ctx->Map.entry.Post_Mode );
1917 }
1918 
1919 /**
1920  * @fn void T_case_body_RtemsTaskReqMode( void )
1921  */
1922 T_TEST_CASE_FIXTURE( RtemsTaskReqMode, &RtemsTaskReqMode_Fixture )
1923 {
1924   RtemsTaskReqMode_Context *ctx;
1925 
1926   ctx = T_fixture_context();
1927   ctx->Map.in_action_loop = true;
1928   ctx->Map.index = 0;
1929 
1930   for (
1931     ctx->Map.pcs[ 0 ] = RtemsTaskReqMode_Pre_PrevMode_Valid;
1932     ctx->Map.pcs[ 0 ] < RtemsTaskReqMode_Pre_PrevMode_NA;
1933     ++ctx->Map.pcs[ 0 ]
1934   ) {
1935     for (
1936       ctx->Map.pcs[ 1 ] = RtemsTaskReqMode_Pre_PreemptCur_Yes;
1937       ctx->Map.pcs[ 1 ] < RtemsTaskReqMode_Pre_PreemptCur_NA;
1938       ++ctx->Map.pcs[ 1 ]
1939     ) {
1940       for (
1941         ctx->Map.pcs[ 2 ] = RtemsTaskReqMode_Pre_TimesliceCur_Yes;
1942         ctx->Map.pcs[ 2 ] < RtemsTaskReqMode_Pre_TimesliceCur_NA;
1943         ++ctx->Map.pcs[ 2 ]
1944       ) {
1945         for (
1946           ctx->Map.pcs[ 3 ] = RtemsTaskReqMode_Pre_ASRCur_Yes;
1947           ctx->Map.pcs[ 3 ] < RtemsTaskReqMode_Pre_ASRCur_NA;
1948           ++ctx->Map.pcs[ 3 ]
1949         ) {
1950           for (
1951             ctx->Map.pcs[ 4 ] = RtemsTaskReqMode_Pre_IntLvlCur_Zero;
1952             ctx->Map.pcs[ 4 ] < RtemsTaskReqMode_Pre_IntLvlCur_NA;
1953             ++ctx->Map.pcs[ 4 ]
1954           ) {
1955             for (
1956               ctx->Map.pcs[ 5 ] = RtemsTaskReqMode_Pre_Preempt_Yes;
1957               ctx->Map.pcs[ 5 ] < RtemsTaskReqMode_Pre_Preempt_NA;
1958               ++ctx->Map.pcs[ 5 ]
1959             ) {
1960               for (
1961                 ctx->Map.pcs[ 6 ] = RtemsTaskReqMode_Pre_Timeslice_Yes;
1962                 ctx->Map.pcs[ 6 ] < RtemsTaskReqMode_Pre_Timeslice_NA;
1963                 ++ctx->Map.pcs[ 6 ]
1964               ) {
1965                 for (
1966                   ctx->Map.pcs[ 7 ] = RtemsTaskReqMode_Pre_ASR_Yes;
1967                   ctx->Map.pcs[ 7 ] < RtemsTaskReqMode_Pre_ASR_NA;
1968                   ++ctx->Map.pcs[ 7 ]
1969                 ) {
1970                   for (
1971                     ctx->Map.pcs[ 8 ] = RtemsTaskReqMode_Pre_IntLvl_Zero;
1972                     ctx->Map.pcs[ 8 ] < RtemsTaskReqMode_Pre_IntLvl_NA;
1973                     ++ctx->Map.pcs[ 8 ]
1974                   ) {
1975                     for (
1976                       ctx->Map.pcs[ 9 ] = RtemsTaskReqMode_Pre_PreemptMsk_Yes;
1977                       ctx->Map.pcs[ 9 ] < RtemsTaskReqMode_Pre_PreemptMsk_NA;
1978                       ++ctx->Map.pcs[ 9 ]
1979                     ) {
1980                       for (
1981                         ctx->Map.pcs[ 10 ] = RtemsTaskReqMode_Pre_TimesliceMsk_Yes;
1982                         ctx->Map.pcs[ 10 ] < RtemsTaskReqMode_Pre_TimesliceMsk_NA;
1983                         ++ctx->Map.pcs[ 10 ]
1984                       ) {
1985                         for (
1986                           ctx->Map.pcs[ 11 ] = RtemsTaskReqMode_Pre_ASRMsk_Yes;
1987                           ctx->Map.pcs[ 11 ] < RtemsTaskReqMode_Pre_ASRMsk_NA;
1988                           ++ctx->Map.pcs[ 11 ]
1989                         ) {
1990                           for (
1991                             ctx->Map.pcs[ 12 ] = RtemsTaskReqMode_Pre_IntLvlMsk_Yes;
1992                             ctx->Map.pcs[ 12 ] < RtemsTaskReqMode_Pre_IntLvlMsk_NA;
1993                             ++ctx->Map.pcs[ 12 ]
1994                           ) {
1995                             ctx->Map.entry = RtemsTaskReqMode_PopEntry( ctx );
1996 
1997                             if ( ctx->Map.entry.Skip ) {
1998                               continue;
1999                             }
2000 
2001                             RtemsTaskReqMode_Prepare( ctx );
2002                             RtemsTaskReqMode_TestVariant( ctx );
2003                             RtemsTaskReqMode_Cleanup( ctx );
2004                           }
2005                         }
2006                       }
2007                     }
2008                   }
2009                 }
2010               }
2011             }
2012           }
2013         }
2014       }
2015     }
2016   }
2017 }
2018 
2019 /** @} */