Changeset 508b0df1 in mainline for uspace/lib/c/arch/arm32/src/atomic.c
- Timestamp:
- 2018-09-06T20:21:52Z (6 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 78de83de, fc10e1b
- Parents:
- 4621d23
- git-author:
- Jiří Zárevúcky <jiri.zarevucky@…> (2018-08-13 03:53:39)
- git-committer:
- Jiří Zárevúcky <jiri.zarevucky@…> (2018-09-06 20:21:52)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/arch/arm32/src/atomic.c
r4621d23 r508b0df1 81 81 } 82 82 83 unsigned short __atomic_fetch_add_2(volatile unsigned short *mem, unsigned short val, int model) 84 { 85 (void) model; 86 87 unsigned short ret; 88 89 /* 90 * The following instructions between labels 1 and 2 constitute a 91 * Restartable Atomic Seqeunce. Should the sequence be non-atomic, 92 * the kernel will restart it. 93 */ 94 asm volatile ( 95 "1:\n" 96 " adr %[ret], 1b\n" 97 " str %[ret], %[rp0]\n" 98 " adr %[ret], 2f\n" 99 " str %[ret], %[rp1]\n" 100 " ldrh %[ret], %[addr]\n" 101 " add %[ret], %[ret], %[imm]\n" 102 " strh %[ret], %[addr]\n" 103 "2:\n" 104 : [ret] "=&r" (ret), 105 [rp0] "=m" (ras_page[0]), 106 [rp1] "=m" (ras_page[1]), 107 [addr] "+m" (*mem) 108 : [imm] "r" (val) 109 ); 110 111 ras_page[0] = 0; 112 ras_page[1] = 0xffffffff; 113 114 return ret - val; 115 } 116 83 117 unsigned __atomic_fetch_add_4(volatile unsigned *mem, unsigned val, int model) 84 118 {
Note:
See TracChangeset
for help on using the changeset viewer.