File indexing completed on 2025-05-11 08:24:52
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
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
0064
0065
0066
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
0210
0211 typedef struct {
0212
0213
0214
0215 rtems_id worker_id;
0216
0217
0218
0219
0220 rtems_mode runner_mode;
0221
0222
0223
0224
0225 rtems_mode previous_mode_set_value;
0226
0227
0228
0229
0230
0231 rtems_mode current_mode;
0232
0233
0234
0235
0236 uint32_t worker_counter;
0237
0238
0239
0240
0241
0242 uint32_t worker_counter_before;
0243
0244
0245
0246
0247
0248 uint32_t worker_counter_after;
0249
0250
0251
0252
0253 uint32_t signal_counter;
0254
0255
0256
0257
0258
0259 uint32_t signal_counter_before;
0260
0261
0262
0263
0264
0265 uint32_t signal_counter_after;
0266
0267
0268
0269
0270
0271 rtems_mode mode_set;
0272
0273
0274
0275
0276
0277 rtems_mode mode_mask;
0278
0279
0280
0281
0282
0283 rtems_mode *previous_mode_set;
0284
0285
0286
0287
0288
0289 rtems_status_code status;
0290
0291 struct {
0292
0293
0294
0295 size_t pcs[ 13 ];
0296
0297
0298
0299
0300 bool in_action_loop;
0301
0302
0303
0304
0305 size_t index;
0306
0307
0308
0309
0310 RtemsTaskReqMode_Entry entry;
0311
0312
0313
0314
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
0526
0527
0528 ctx->previous_mode_set = &ctx->previous_mode_set_value;
0529 break;
0530 }
0531
0532 case RtemsTaskReqMode_Pre_PrevMode_Null: {
0533
0534
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
0554
0555 ctx->current_mode |= RTEMS_PREEMPT;
0556 break;
0557 }
0558
0559 case RtemsTaskReqMode_Pre_PreemptCur_No: {
0560
0561
0562
0563
0564
0565
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
0589
0590 ctx->current_mode |= RTEMS_TIMESLICE;
0591 break;
0592 }
0593
0594 case RtemsTaskReqMode_Pre_TimesliceCur_No: {
0595
0596
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
0616
0617 ctx->current_mode |= RTEMS_ASR;
0618 break;
0619 }
0620
0621 case RtemsTaskReqMode_Pre_ASRCur_No: {
0622
0623
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
0643
0644 ctx->current_mode |= RTEMS_INTERRUPT_LEVEL( 0 );
0645 break;
0646 }
0647
0648 case RtemsTaskReqMode_Pre_IntLvlCur_Positive: {
0649
0650
0651
0652
0653
0654
0655
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
0679
0680 ctx->mode_set |= RTEMS_PREEMPT;
0681 break;
0682 }
0683
0684 case RtemsTaskReqMode_Pre_Preempt_No: {
0685
0686
0687
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
0707
0708
0709 ctx->mode_set |= RTEMS_TIMESLICE;
0710 break;
0711 }
0712
0713 case RtemsTaskReqMode_Pre_Timeslice_No: {
0714
0715
0716
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
0736
0737
0738 ctx->mode_set |= RTEMS_ASR;
0739 break;
0740 }
0741
0742 case RtemsTaskReqMode_Pre_ASR_No: {
0743
0744
0745
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
0765
0766 ctx->mode_set |= RTEMS_INTERRUPT_LEVEL( 0 );
0767 break;
0768 }
0769
0770 case RtemsTaskReqMode_Pre_IntLvl_Positive: {
0771
0772
0773
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
0793
0794
0795 ctx->mode_mask |= RTEMS_PREEMPT_MASK;
0796 break;
0797 }
0798
0799 case RtemsTaskReqMode_Pre_PreemptMsk_No: {
0800
0801
0802
0803
0804
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
0822
0823
0824 ctx->mode_mask |= RTEMS_TIMESLICE_MASK;
0825 break;
0826 }
0827
0828 case RtemsTaskReqMode_Pre_TimesliceMsk_No: {
0829
0830
0831
0832
0833
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
0851
0852
0853 ctx->mode_mask |= RTEMS_ASR_MASK;
0854 break;
0855 }
0856
0857 case RtemsTaskReqMode_Pre_ASRMsk_No: {
0858
0859
0860
0861
0862
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
0880
0881
0882 ctx->mode_mask |= RTEMS_INTERRUPT_MASK;
0883 break;
0884 }
0885
0886 case RtemsTaskReqMode_Pre_IntLvlMsk_No: {
0887
0888
0889
0890
0891
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
0909
0910 T_rsc_success( ctx->status );
0911 break;
0912 }
0913
0914 case RtemsTaskReqMode_Post_Status_InvAddr: {
0915
0916
0917
0918 T_rsc( ctx->status, RTEMS_INVALID_ADDRESS );
0919 break;
0920 }
0921
0922 case RtemsTaskReqMode_Post_Status_NotImplIntLvl: {
0923
0924
0925
0926 T_rsc( ctx->status, RTEMS_NOT_IMPLEMENTED );
0927 break;
0928 }
0929
0930 case RtemsTaskReqMode_Post_Status_NotImplIntLvlSMP: {
0931
0932
0933
0934
0935
0936
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
0949
0950
0951
0952
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
0976
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
0985
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
0994
0995
0996
0997
0998
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
1022
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
1031
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
1040
1041
1042
1043
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
1067
1068
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
1078
1079
1080 T_eq_u32( ctx->previous_mode_set_value, INVALID_MODE );
1081 break;
1082 }
1083
1084 case RtemsTaskReqMode_Post_PMVar_Maybe: {
1085
1086
1087
1088
1089
1090
1091
1092
1093
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
1119
1120
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
1129
1130
1131 CheckMode( ctx, ctx->current_mode, 0, 0 );
1132 break;
1133 }
1134
1135 case RtemsTaskReqMode_Post_Mode_Maybe: {
1136
1137
1138
1139
1140
1141
1142
1143
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
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