1/***************************************************************************
2 * Copyright (c) 2024 Microsoft Corporation
3 *
4 * This program and the accompanying materials are made available under the
5 * terms of the MIT License which is available at
6 * https://opensource.org/licenses/MIT.
7 *
8 * SPDX-License-Identifier: MIT
9 **************************************************************************/
10
11
12/**************************************************************************/
13/**************************************************************************/
14/**                                                                       */
15/** ThreadX Component                                                     */
16/**                                                                       */
17/**   ThreadX MISRA Compliance                                            */
18/**                                                                       */
19/**************************************************************************/
20/**************************************************************************/
21
22#ifdef TX_INCLUDE_USER_DEFINE_FILE
23#include "tx_user.h"
24#endif
25
26        #define SHT_PROGBITS 0x1
27
28        .global __aeabi_memset
29        .global _tx_thread_current_ptr
30        .global _tx_thread_interrupt_disable
31        .global _tx_thread_interrupt_restore
32        .global _tx_thread_stack_analyze
33        .global _tx_thread_stack_error_handler
34        .global _tx_thread_system_state
35#ifdef TX_ENABLE_EVENT_TRACE
36        .global _tx_trace_buffer_current_ptr
37        .global _tx_trace_buffer_end_ptr
38        .global _tx_trace_buffer_start_ptr
39        .global _tx_trace_event_enable_bits
40        .global _tx_trace_full_notify_function
41        .global _tx_trace_header_ptr
42#endif
43
44        .global _tx_misra_always_true
45        .global _tx_misra_block_pool_to_uchar_pointer_convert
46        .global _tx_misra_byte_pool_to_uchar_pointer_convert
47        .global _tx_misra_char_to_uchar_pointer_convert
48        .global _tx_misra_const_char_to_char_pointer_convert
49#ifdef TX_ENABLE_EVENT_TRACE
50        .global _tx_misra_entry_to_uchar_pointer_convert
51#endif
52        .global _tx_misra_indirect_void_to_uchar_pointer_convert
53        .global _tx_misra_memset
54        .global _tx_misra_message_copy
55#ifdef TX_ENABLE_EVENT_TRACE
56        .global _tx_misra_object_to_uchar_pointer_convert
57#endif
58        .global _tx_misra_pointer_to_ulong_convert
59        .global _tx_misra_status_get
60        .global _tx_misra_thread_stack_check
61#ifdef TX_ENABLE_EVENT_TRACE
62        .global _tx_misra_time_stamp_get
63#endif
64        .global _tx_misra_timer_indirect_to_void_pointer_convert
65        .global _tx_misra_timer_pointer_add
66        .global _tx_misra_timer_pointer_dif
67#ifdef TX_ENABLE_EVENT_TRACE
68        .global _tx_misra_trace_event_insert
69#endif
70        .global _tx_misra_uchar_pointer_add
71        .global _tx_misra_uchar_pointer_dif
72        .global _tx_misra_uchar_pointer_sub
73        .global _tx_misra_uchar_to_align_type_pointer_convert
74        .global _tx_misra_uchar_to_block_pool_pointer_convert
75#ifdef TX_ENABLE_EVENT_TRACE
76        .global _tx_misra_uchar_to_entry_pointer_convert
77        .global _tx_misra_uchar_to_header_pointer_convert
78#endif
79        .global _tx_misra_uchar_to_indirect_byte_pool_pointer_convert
80        .global _tx_misra_uchar_to_indirect_uchar_pointer_convert
81#ifdef TX_ENABLE_EVENT_TRACE
82        .global _tx_misra_uchar_to_object_pointer_convert
83#endif
84        .global _tx_misra_uchar_to_void_pointer_convert
85        .global _tx_misra_ulong_pointer_add
86        .global _tx_misra_ulong_pointer_dif
87        .global _tx_misra_ulong_pointer_sub
88        .global _tx_misra_ulong_to_pointer_convert
89        .global _tx_misra_ulong_to_thread_pointer_convert
90        .global _tx_misra_user_timer_pointer_get
91        .global _tx_misra_void_to_block_pool_pointer_convert
92        .global _tx_misra_void_to_byte_pool_pointer_convert
93        .global _tx_misra_void_to_event_flags_pointer_convert
94        .global _tx_misra_void_to_indirect_uchar_pointer_convert
95        .global _tx_misra_void_to_mutex_pointer_convert
96        .global _tx_misra_void_to_queue_pointer_convert
97        .global _tx_misra_void_to_semaphore_pointer_convert
98        .global _tx_misra_void_to_thread_pointer_convert
99        .global _tx_misra_void_to_uchar_pointer_convert
100        .global _tx_misra_void_to_ulong_pointer_convert
101        .global _tx_misra_ipsr_get
102        .global _tx_misra_control_get
103        .global _tx_misra_control_set
104#ifdef __ARM_FP
105        .global _tx_misra_fpccr_get
106        .global _tx_misra_vfp_touch
107#endif
108
109        .global _tx_misra_event_flags_group_not_used
110        .global _tx_misra_event_flags_set_notify_not_used
111        .global _tx_misra_queue_not_used
112        .global _tx_misra_queue_send_notify_not_used
113        .global _tx_misra_semaphore_not_used
114        .global _tx_misra_semaphore_put_notify_not_used
115        .global _tx_misra_thread_entry_exit_notify_not_used
116        .global _tx_misra_thread_not_used
117
118/**************************************************************************/
119/**************************************************************************/
120/**                                                                       */
121/**  VOID  _tx_misra_memset(VOID *ptr, UINT value, UINT size);            */
122/**                                                                       */
123/**************************************************************************/
124/**************************************************************************/
125
126        .text
127        .align 4
128        .syntax unified
129        .thumb_func
130_tx_misra_memset:
131        PUSH     {R4,LR}
132        MOVS     R4,R0
133        MOVS     R0,R2
134        MOVS     R2,R1
135        MOVS     R1,R0
136        MOVS     R0,R4
137        BL       __aeabi_memset
138        POP      {R4,PC}          // return
139
140/**************************************************************************/
141/**************************************************************************/
142/**                                                                       */
143/**  UCHAR  *_tx_misra_uchar_pointer_add(UCHAR *ptr, ULONG amount);       */
144/**                                                                       */
145/**************************************************************************/
146/**************************************************************************/
147
148        .text
149        .thumb_func
150_tx_misra_uchar_pointer_add:
151        ADD      R0,R0,R1
152        BX       LR               // return
153
154
155/**************************************************************************/
156/**************************************************************************/
157/**                                                                       */
158/**  UCHAR  *_tx_misra_uchar_pointer_sub(UCHAR *ptr, ULONG amount);       */
159/**                                                                       */
160/**************************************************************************/
161/**************************************************************************/
162
163        .text
164        .thumb_func
165_tx_misra_uchar_pointer_sub:
166        RSBS     R1,R1,#+0
167        ADD      R0,R0,R1
168        BX       LR               // return
169
170
171/**************************************************************************/
172/**************************************************************************/
173/**                                                                       */
174/**  ULONG  _tx_misra_uchar_pointer_dif(UCHAR *ptr1, UCHAR *ptr2);        */
175/**                                                                       */
176/**************************************************************************/
177/**************************************************************************/
178
179        .text
180        .thumb_func
181_tx_misra_uchar_pointer_dif:
182        SUBS     R0,R0,R1
183        BX       LR               // return
184
185
186/************************************************************************************************************************************/
187/************************************************************************************************************************************/
188/**                                                                                                                                 */
189/**  This single function serves all of the below prototypes.                                                                       */
190/**                                                                                                                                 */
191/**  ULONG  _tx_misra_pointer_to_ulong_convert(VOID *ptr);                                                                          */
192/**  VOID  *_tx_misra_ulong_to_pointer_convert(ULONG input);                                                                        */
193/**  UCHAR  **_tx_misra_indirect_void_to_uchar_pointer_convert(VOID **return_ptr);                                                  */
194/**  UCHAR  **_tx_misra_uchar_to_indirect_uchar_pointer_convert(UCHAR *pointer);                                                    */
195/**  UCHAR  *_tx_misra_block_pool_to_uchar_pointer_convert(TX_BLOCK_POOL *pool);                                                    */
196/**  TX_BLOCK_POOL  *_tx_misra_void_to_block_pool_pointer_convert(VOID *pointer);                                                   */
197/**  UCHAR  *_tx_misra_void_to_uchar_pointer_convert(VOID *pointer);                                                                */
198/**  TX_BLOCK_POOL *_tx_misra_uchar_to_block_pool_pointer_convert(UCHAR *pointer);                                                  */
199/**  UCHAR  **_tx_misra_void_to_indirect_uchar_pointer_convert(VOID *pointer);                                                      */
200/**  TX_BYTE_POOL  *_tx_misra_void_to_byte_pool_pointer_convert(VOID *pointer);                                                     */
201/**  UCHAR  *_tx_misra_byte_pool_to_uchar_pointer_convert(TX_BYTE_POOL *pool);                                                      */
202/**  ALIGN_TYPE  *_tx_misra_uchar_to_align_type_pointer_convert(UCHAR *pointer);                                                    */
203/**  TX_BYTE_POOL  **_tx_misra_uchar_to_indirect_byte_pool_pointer_convert(UCHAR *pointer);                                         */
204/**  TX_EVENT_FLAGS_GROUP  *_tx_misra_void_to_event_flags_pointer_convert(VOID *pointer);                                           */
205/**  ULONG  *_tx_misra_void_to_ulong_pointer_convert(VOID *pointer);                                                                */
206/**  TX_MUTEX  *_tx_misra_void_to_mutex_pointer_convert(VOID *pointer);                                                             */
207/**  TX_QUEUE  *_tx_misra_void_to_queue_pointer_convert(VOID *pointer);                                                             */
208/**  TX_SEMAPHORE  *_tx_misra_void_to_semaphore_pointer_convert(VOID *pointer);                                                     */
209/**  VOID  *_tx_misra_uchar_to_void_pointer_convert(UCHAR *pointer);                                                                */
210/**  TX_THREAD  *_tx_misra_ulong_to_thread_pointer_convert(ULONG value);                                                            */
211/**  VOID  *_tx_misra_timer_indirect_to_void_pointer_convert(TX_TIMER_INTERNAL **pointer);                                          */
212/**  CHAR  *_tx_misra_const_char_to_char_pointer_convert(const char *pointer);                                                      */
213/**  TX_THREAD  *_tx_misra_void_to_thread_pointer_convert(void *pointer);                                                           */
214/**  UCHAR  *_tx_misra_object_to_uchar_pointer_convert(TX_TRACE_OBJECT_ENTRY *pointer);                                             */
215/**  TX_TRACE_OBJECT_ENTRY  *_tx_misra_uchar_to_object_pointer_convert(UCHAR *pointer);                                             */
216/**  TX_TRACE_HEADER  *_tx_misra_uchar_to_header_pointer_convert(UCHAR *pointer);                                                   */
217/**  TX_TRACE_BUFFER_ENTRY  *_tx_misra_uchar_to_entry_pointer_convert(UCHAR *pointer);                                              */
218/**  UCHAR  *_tx_misra_entry_to_uchar_pointer_convert(TX_TRACE_BUFFER_ENTRY *pointer);                                              */
219/**  UCHAR  *_tx_misra_char_to_uchar_pointer_convert(CHAR *pointer);                                                                */
220/**  VOID    _tx_misra_event_flags_group_not_used(TX_EVENT_FLAGS_GROUP *group_ptr);                                                 */
221/**  VOID    _tx_misra_event_flags_set_notify_not_used(VOID (*events_set_notify)(TX_EVENT_FLAGS_GROUP *notify_group_ptr));          */
222/**  VOID    _tx_misra_queue_not_used(TX_QUEUE *queue_ptr);                                                                         */
223/**  VOID    _tx_misra_queue_send_notify_not_used(VOID (*queue_send_notify)(TX_QUEUE *notify_queue_ptr));                           */
224/**  VOID    _tx_misra_semaphore_not_used(TX_SEMAPHORE *semaphore_ptr);                                                             */
225/**  VOID    _tx_misra_semaphore_put_notify_not_used(VOID (*semaphore_put_notify)(TX_SEMAPHORE *notify_semaphore_ptr));             */
226/**  VOID    _tx_misra_thread_not_used(TX_THREAD *thread_ptr);                                                                      */
227/**  VOID    _tx_misra_thread_entry_exit_notify_not_used(VOID (*thread_entry_exit_notify)(TX_THREAD *notify_thread_ptr, UINT id));  */
228/**                                                                                                                                 */
229/************************************************************************************************************************************/
230/************************************************************************************************************************************/
231        .text
232        .thumb_func
233_tx_misra_pointer_to_ulong_convert:
234_tx_misra_ulong_to_pointer_convert:
235_tx_misra_indirect_void_to_uchar_pointer_convert:
236_tx_misra_uchar_to_indirect_uchar_pointer_convert:
237_tx_misra_block_pool_to_uchar_pointer_convert:
238_tx_misra_void_to_block_pool_pointer_convert:
239_tx_misra_void_to_uchar_pointer_convert:
240_tx_misra_uchar_to_block_pool_pointer_convert:
241_tx_misra_void_to_indirect_uchar_pointer_convert:
242_tx_misra_void_to_byte_pool_pointer_convert:
243_tx_misra_byte_pool_to_uchar_pointer_convert:
244_tx_misra_uchar_to_align_type_pointer_convert:
245_tx_misra_uchar_to_indirect_byte_pool_pointer_convert:
246_tx_misra_void_to_event_flags_pointer_convert:
247_tx_misra_void_to_ulong_pointer_convert:
248_tx_misra_void_to_mutex_pointer_convert:
249_tx_misra_void_to_queue_pointer_convert:
250_tx_misra_void_to_semaphore_pointer_convert:
251_tx_misra_uchar_to_void_pointer_convert:
252_tx_misra_ulong_to_thread_pointer_convert:
253_tx_misra_timer_indirect_to_void_pointer_convert:
254_tx_misra_const_char_to_char_pointer_convert:
255_tx_misra_void_to_thread_pointer_convert:
256#ifdef TX_ENABLE_EVENT_TRACE
257_tx_misra_object_to_uchar_pointer_convert:
258_tx_misra_uchar_to_object_pointer_convert:
259_tx_misra_uchar_to_header_pointer_convert:
260_tx_misra_uchar_to_entry_pointer_convert:
261_tx_misra_entry_to_uchar_pointer_convert:
262#endif
263_tx_misra_char_to_uchar_pointer_convert:
264_tx_misra_event_flags_group_not_used:
265_tx_misra_event_flags_set_notify_not_used:
266_tx_misra_queue_not_used:
267_tx_misra_queue_send_notify_not_used:
268_tx_misra_semaphore_not_used:
269_tx_misra_semaphore_put_notify_not_used:
270_tx_misra_thread_entry_exit_notify_not_used:
271_tx_misra_thread_not_used:
272
273        BX       LR               // return
274
275
276/**************************************************************************/
277/**************************************************************************/
278/**                                                                       */
279/**  ULONG  *_tx_misra_ulong_pointer_add(ULONG *ptr, ULONG amount);       */
280/**                                                                       */
281/**************************************************************************/
282/**************************************************************************/
283
284        .text
285        .thumb_func
286_tx_misra_ulong_pointer_add:
287        ADD      R0,R0,R1, LSL #+2
288        BX       LR               // return
289
290
291/**************************************************************************/
292/**************************************************************************/
293/**                                                                       */
294/**  ULONG  *_tx_misra_ulong_pointer_sub(ULONG *ptr, ULONG amount);       */
295/**                                                                       */
296/**************************************************************************/
297/**************************************************************************/
298
299        .text
300        .thumb_func
301_tx_misra_ulong_pointer_sub:
302        MVNS     R2,#+3
303        MULS     R1,R2,R1
304        ADD      R0,R0,R1
305        BX       LR               // return
306
307
308/**************************************************************************/
309/**************************************************************************/
310/**                                                                       */
311/**  ULONG  _tx_misra_ulong_pointer_dif(ULONG *ptr1, ULONG *ptr2);        */
312/**                                                                       */
313/**************************************************************************/
314/**************************************************************************/
315
316        .text
317        .thumb_func
318_tx_misra_ulong_pointer_dif:
319        SUBS     R0,R0,R1
320        ASRS     R0,R0,#+2
321        BX       LR               // return
322
323
324/**************************************************************************/
325/**************************************************************************/
326/**                                                                       */
327/**  VOID  _tx_misra_message_copy(ULONG **source, ULONG **destination,    */
328/**                                                           UINT size); */
329/**                                                                       */
330/**************************************************************************/
331/**************************************************************************/
332
333        .text
334        .thumb_func
335_tx_misra_message_copy:
336        PUSH     {R4,R5}
337        LDR      R3,[R0, #+0]
338        LDR      R4,[R1, #+0]
339        LDR      R5,[R3, #+0]
340        STR      R5,[R4, #+0]
341        ADDS     R4,R4,#+4
342        ADDS     R3,R3,#+4
343        CMP      R2,#+2
344        BCC.N    _tx_misra_message_copy_0
345        SUBS     R2,R2,#+1
346        B.N      _tx_misra_message_copy_1
347_tx_misra_message_copy_2:
348        LDR      R5,[R3, #+0]
349        STR      R5,[R4, #+0]
350        ADDS     R4,R4,#+4
351        ADDS     R3,R3,#+4
352        SUBS     R2,R2,#+1
353_tx_misra_message_copy_1:
354        CMP      R2,#+0
355        BNE.N    _tx_misra_message_copy_2
356_tx_misra_message_copy_0:
357        STR      R3,[R0, #+0]
358        STR      R4,[R1, #+0]
359        POP      {R4,R5}
360        BX       LR               // return
361
362
363/**************************************************************************/
364/**************************************************************************/
365/**                                                                       */
366/**  ULONG  _tx_misra_timer_pointer_dif(TX_TIMER_INTERNAL **ptr1,         */
367/**                                           TX_TIMER_INTERNAL **ptr2);  */
368/**                                                                       */
369/**************************************************************************/
370/**************************************************************************/
371
372        .text
373        .thumb_func
374_tx_misra_timer_pointer_dif:
375        SUBS     R0,R0,R1
376        ASRS     R0,R0,#+2
377        BX       LR               // return
378
379
380/**************************************************************************/
381/**************************************************************************/
382/**                                                                       */
383/**  TX_TIMER_INTERNAL **_tx_misra_timer_pointer_add(TX_TIMER_INTERNAL    */
384/**                                                  **ptr1, ULONG size); */
385/**                                                                       */
386/**************************************************************************/
387/**************************************************************************/
388
389        .text
390        .thumb_func
391_tx_misra_timer_pointer_add:
392        ADD      R0,R0,R1, LSL #+2
393        BX       LR               // return
394
395
396/**************************************************************************/
397/**************************************************************************/
398/**                                                                       */
399/**  VOID  _tx_misra_user_timer_pointer_get(TX_TIMER_INTERNAL             */
400/**                              *internal_timer, TX_TIMER **user_timer); */
401/**                                                                       */
402/**************************************************************************/
403/**************************************************************************/
404
405        .text
406        .thumb_func
407_tx_misra_user_timer_pointer_get:
408        SUBS    R0,#8
409        STR     R0,[R1, #+0]
410        BX      LR               // return
411
412
413/**************************************************************************/
414/**************************************************************************/
415/**                                                                       */
416/**  VOID  _tx_misra_thread_stack_check(TX_THREAD *thread_ptr,            */
417/**                                              VOID **highest_stack);   */
418/**                                                                       */
419/**************************************************************************/
420/**************************************************************************/
421
422        .text
423        .thumb_func
424_tx_misra_thread_stack_check:
425        PUSH     {R3-R5,LR}
426        MOVS     R4,R0
427        MOVS     R5,R1
428        BL       _tx_thread_interrupt_disable
429        CMP      R4,#+0
430        BEQ.N    _tx_misra_thread_stack_check_0
431        LDR      R1,[R4, #+0]
432        LDR      R2,=0x54485244
433        CMP      R1,R2
434        BNE.N    _tx_misra_thread_stack_check_0
435        LDR      R1,[R4, #+8]
436        LDR      R2,[R5, #+0]
437        CMP      R1,R2
438        BCS.N    _tx_misra_thread_stack_check_1
439        LDR      R1,[R4, #+8]
440        STR      R1,[R5, #+0]
441_tx_misra_thread_stack_check_1:
442        LDR      R1,[R4, #+12]
443        LDR      R1,[R1, #+0]
444        CMP      R1,#-269488145
445        BNE.N    _tx_misra_thread_stack_check_2
446        LDR      R1,[R4, #+16]
447        LDR      R1,[R1, #+1]
448        CMP      R1,#-269488145
449        BNE.N    _tx_misra_thread_stack_check_2
450        LDR      R1,[R5, #+0]
451        LDR      R2,[R4, #+12]
452        CMP      R1,R2
453        BCS.N    _tx_misra_thread_stack_check_3
454_tx_misra_thread_stack_check_2:
455        BL       _tx_thread_interrupt_restore
456        MOVS     R0,R4
457        BL       _tx_thread_stack_error_handler
458        BL       _tx_thread_interrupt_disable
459_tx_misra_thread_stack_check_3:
460        LDR      R1,[R5, #+0]
461        LDR      R1,[R1, #-4]
462        CMP      R1,#-269488145
463        BEQ.N    _tx_misra_thread_stack_check_0
464        BL       _tx_thread_interrupt_restore
465        MOVS     R0,R4
466        BL       _tx_thread_stack_analyze
467        BL       _tx_thread_interrupt_disable
468_tx_misra_thread_stack_check_0:
469        BL       _tx_thread_interrupt_restore
470        POP      {R0,R4,R5,PC}    // return
471
472#ifdef TX_ENABLE_EVENT_TRACE
473
474/**************************************************************************/
475/**************************************************************************/
476/**                                                                       */
477/**  VOID  _tx_misra_trace_event_insert(ULONG event_id,                   */
478/**           VOID *info_field_1, ULONG info_field_2, ULONG info_field_3, */
479/**           ULONG info_field_4, ULONG filter, ULONG time_stamp);        */
480/**                                                                       */
481/**************************************************************************/
482/**************************************************************************/
483
484        .text
485        .thumb_func
486_tx_misra_trace_event_insert:
487        PUSH     {R3-R7,LR}
488        LDR.N    R4,DataTable2_1
489        LDR      R4,[R4, #+0]
490        CMP      R4,#+0
491        BEQ.N    _tx_misra_trace_event_insert_0
492        LDR.N    R5,DataTable2_2
493        LDR      R5,[R5, #+0]
494        LDR      R6,[SP, #+28]
495        TST      R5,R6
496        BEQ.N    _tx_misra_trace_event_insert_0
497        LDR.N    R5,DataTable2_3
498        LDR      R5,[R5, #+0]
499        LDR.N    R6,DataTable2_4
500        LDR      R6,[R6, #+0]
501        CMP      R5,#+0
502        BNE.N    _tx_misra_trace_event_insert_1
503        LDR      R5,[R6, #+44]
504        LDR      R7,[R6, #+60]
505        LSLS     R7,R7,#+16
506        ORRS     R7,R7,#0x80000000
507        ORRS     R5,R7,R5
508        B.N      _tx_misra_trace_event_insert_2
509_tx_misra_trace_event_insert_1:
510        CMP      R5,#-252645136
511        BCS.N    _tx_misra_trace_event_insert_3
512        MOVS     R5,R6
513        MOVS     R6,#-1
514        B.N      _tx_misra_trace_event_insert_2
515_tx_misra_trace_event_insert_3:
516        MOVS     R6,#-252645136
517        MOVS     R5,#+0
518_tx_misra_trace_event_insert_2:
519        STR      R6,[R4, #+0]
520        STR      R5,[R4, #+4]
521        STR      R0,[R4, #+8]
522        LDR      R0,[SP, #+32]
523        STR      R0,[R4, #+12]
524        STR      R1,[R4, #+16]
525        STR      R2,[R4, #+20]
526        STR      R3,[R4, #+24]
527        LDR      R0,[SP, #+24]
528        STR      R0,[R4, #+28]
529        ADDS     R4,R4,#+32
530        LDR.N    R0,DataTable2_5
531        LDR      R0,[R0, #+0]
532        CMP      R4,R0
533        BCC.N    _tx_misra_trace_event_insert_4
534        LDR.N    R0,DataTable2_6
535        LDR      R4,[R0, #+0]
536        LDR.N    R0,DataTable2_1
537        STR      R4,[R0, #+0]
538        LDR.N    R0,DataTable2_7
539        LDR      R0,[R0, #+0]
540        STR      R4,[R0, #+32]
541        LDR.N    R0,DataTable2_8
542        LDR      R0,[R0, #+0]
543        CMP      R0,#+0
544        BEQ.N    _tx_misra_trace_event_insert_0
545        LDR.N    R0,DataTable2_7
546        LDR      R0,[R0, #+0]
547        LDR.N    R1,DataTable2_8
548        LDR      R1,[R1, #+0]
549        BLX      R1
550        B.N      _tx_misra_trace_event_insert_0
551_tx_misra_trace_event_insert_4:
552        LDR.N    R0,DataTable2_1
553        STR      R4,[R0, #+0]
554        LDR.N    R0,DataTable2_7
555        LDR      R0,[R0, #+0]
556        STR      R4,[R0, #+32]
557_tx_misra_trace_event_insert_0:
558        POP      {R0,R4-R7,PC}    // return
559
560
561        .data
562DataTable2_1:
563        .word     _tx_trace_buffer_current_ptr
564
565        .data
566DataTable2_2:
567        .word     _tx_trace_event_enable_bits
568
569        .data
570DataTable2_5:
571        .word     _tx_trace_buffer_end_ptr
572
573        .data
574DataTable2_6:
575        .word     _tx_trace_buffer_start_ptr
576
577        .data
578DataTable2_7:
579        .word     _tx_trace_header_ptr
580
581        .data
582DataTable2_8:
583        .word     _tx_trace_full_notify_function
584
585
586/**************************************************************************/
587/**************************************************************************/
588/**                                                                       */
589/**  ULONG  _tx_misra_time_stamp_get(VOID);                               */
590/**                                                                       */
591/**************************************************************************/
592/**************************************************************************/
593
594        .text
595        .thumb_func
596_tx_misra_time_stamp_get:
597        MOVS     R0,#+0
598        BX       LR               // return
599
600#endif
601
602        .data
603DataTable2_3:
604        .word     _tx_thread_system_state
605
606        .data
607DataTable2_4:
608        .word     _tx_thread_current_ptr
609
610
611/**************************************************************************/
612/**************************************************************************/
613/**                                                                       */
614/**  UINT  _tx_misra_always_true(void);                                   */
615/**                                                                       */
616/**************************************************************************/
617/**************************************************************************/
618
619        .text
620        .thumb_func
621_tx_misra_always_true:
622        MOVS     R0,#+1
623        BX       LR               // return
624
625
626/**************************************************************************/
627/**************************************************************************/
628/**                                                                       */
629/**  UINT  _tx_misra_status_get(UINT status);                             */
630/**                                                                       */
631/**************************************************************************/
632/**************************************************************************/
633
634        .text
635        .thumb_func
636_tx_misra_status_get:
637        MOVS     R0,#+0
638        BX       LR               // return
639
640
641/***********************************************************************************************/
642/***********************************************************************************************/
643/**                                                                                            */
644/**  ULONG  _tx_misra_ipsr_get(void);                                                          */
645/**                                                                                            */
646/***********************************************************************************************/
647/***********************************************************************************************/
648
649        .text
650        .thumb_func
651_tx_misra_ipsr_get:
652        MRS      R0, IPSR
653        BX       LR               // return
654
655
656/***********************************************************************************************/
657/***********************************************************************************************/
658/**                                                                                            */
659/**  ULONG  _tx_misra_control_get(void);                                                       */
660/**                                                                                            */
661/***********************************************************************************************/
662/***********************************************************************************************/
663
664        .text
665        .thumb_func
666_tx_misra_control_get:
667        MRS      R0, CONTROL
668        BX       LR               // return
669
670
671/***********************************************************************************************/
672/***********************************************************************************************/
673/**                                                                                            */
674/**  void   _tx_misra_control_set(ULONG value);                                                */
675/**                                                                                            */
676/***********************************************************************************************/
677/***********************************************************************************************/
678
679        .text
680        .thumb_func
681_tx_misra_control_set:
682        MSR      CONTROL, R0
683        BX       LR               // return
684
685
686#ifdef __ARM_FP
687
688/***********************************************************************************************/
689/***********************************************************************************************/
690/**                                                                                            */
691/**  ULONG  _tx_misra_fpccr_get(void);                                                         */
692/**                                                                                            */
693/***********************************************************************************************/
694/***********************************************************************************************/
695
696        .text
697        .thumb_func
698_tx_misra_fpccr_get:
699        LDR      r0, =0xE000EF34  // Build FPCCR address
700        LDR      r0, [r0]         // Load FPCCR value
701        BX       LR               // return
702
703
704/***********************************************************************************************/
705/***********************************************************************************************/
706/**                                                                                            */
707/**  void   _tx_misra_vfp_touch(void);                                                         */
708/**                                                                                            */
709/***********************************************************************************************/
710/***********************************************************************************************/
711
712        .text
713        .thumb_func
714_tx_misra_vfp_touch:
715        vmov.f32 s0, s0
716        BX       LR               // return
717
718#endif
719
720
721        .data
722        .word 0
723