X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/4ef03f33e63f11d3aa3bd9ee8bcb9029c39f3bf3..d075c31a89b86975cc2d50d6612252ff3abca566:/lib/base/object.h diff --git a/lib/base/object.h b/lib/base/object.h index 38a6dd35..ed7dda8d 100644 --- a/lib/base/object.h +++ b/lib/base/object.h @@ -49,14 +49,15 @@ public: { \ unsigned long temp; \ __asm__ __volatile__( \ - " .set mips3 \n" \ - "1: ll %0, %1 \n" \ - " .set mips0 \n" \ - " addu %0, 1 \n" \ - " .set mips3 \n" \ - " sc %0, %1 \n" \ - " .set mips0 \n" \ - " beqz %0, 1b \n" \ + " .set mips3 \n" \ + "1: ll %0, %1 # load counter \n" \ + " .set mips0 \n" \ + " addu %0, 1 # increment \n" \ + " .set mips3 \n" \ + " sc %0, %1 # try to store, checking for atomicity \n" \ + " .set mips0 \n" \ + " beqz %0, 1b # if not atomic (0), try again \n" \ + " nop # branch-delay slot \n" \ : "=&r" (temp), "=m" ((int)ref) \ : "m" ((int)ref) \ : "memory"); \ @@ -65,14 +66,15 @@ public: { \ unsigned long temp; \ __asm__ __volatile__( \ - " .set mips3 \n" \ - "1: ll %0, %1 \n" \ - " .set mips0 \n" \ - " subu %0, 1 \n" \ - " .set mips3 \n" \ - " sc %0, %1 \n" \ - " .set mips0 \n" \ - " beqz %0, 1b \n" \ + " .set mips3 \n" \ + "1: ll %0, %1 \n" \ + " .set mips0 \n" \ + " subu %0, 1 # decrement \n" \ + " .set mips3 \n" \ + " sc %0, %1 \n" \ + " .set mips0 \n" \ + " beqz %0, 1b \n" \ + " nop \n" \ : "=&r" (temp), "=m" ((int)ref) \ : "m" ((int)ref) \ : "memory"); \