aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Lipe <robertlipe@usa.net>1999-06-01 23:27:14 +0000
committerJeff Law <law@gcc.gnu.org>1999-06-01 17:27:14 -0600
commit73f3aa96d2782855508a6cc397871e9363c7c387 (patch)
tree58e12397b2d3309d22f0c555ef5b6aac20d80998
parenta310f94892755e13eacfce42277db343e000e049 (diff)
downloadgcc-73f3aa96d2782855508a6cc397871e9363c7c387.zip
gcc-73f3aa96d2782855508a6cc397871e9363c7c387.tar.gz
gcc-73f3aa96d2782855508a6cc397871e9363c7c387.tar.bz2
bastring.h (class basic_string:Rep): Encode xlock opcode as .bytes instead of mnemonics.
Wed Jun 2 00:21:54 1999 Robert Lipe <robertlipe@usa.net> * std/bastring.h (class basic_string:Rep): Encode xlock opcode as .bytes instead of mnemonics. From-SVN: r27295
-rw-r--r--libstdc++/ChangeLog5
-rw-r--r--libstdc++/std/bastring.h11
2 files changed, 14 insertions, 2 deletions
diff --git a/libstdc++/ChangeLog b/libstdc++/ChangeLog
index 8dd6c35..b3d8a32 100644
--- a/libstdc++/ChangeLog
+++ b/libstdc++/ChangeLog
@@ -1,3 +1,8 @@
+Wed Jun 2 00:21:54 1999 Robert Lipe <robertlipe@usa.net>
+
+ * std/bastring.h (class basic_string:Rep): Encode xlock opcode
+ as .bytes instead of mnemonics.
+
1999-05-20 Angela Marie Thomas <angela@cygnus.com>
* configure.in: Test for ${compiler_name}.exe as well.
diff --git a/libstdc++/std/bastring.h b/libstdc++/std/bastring.h
index 6206713..7089126 100644
--- a/libstdc++/std/bastring.h
+++ b/libstdc++/std/bastring.h
@@ -77,8 +77,15 @@ private:
void release ()
{
size_t __val;
- asm ("lock; xaddl %0, %2"
- : "=r" (__val) : "0" (-1), "m" (ref) : "memory");
+ // This opcode exists as a .byte instead of as a mnemonic for the
+ // benefit of SCO OpenServer 5. The system assembler (which is
+ // essentially required on this target) can't assemble xaddl in
+ //COFF mode.
+ asm (".byte 0xf0, 0x0f, 0xc1, 0x02" // lock; xaddl %eax, (%edx)
+ : "=a" (__val)
+ : "0" (-1), "m" (ref), "d" (&ref)
+ : "memory");
+
if (__val == 1)
delete this;
}