diff options
author | buzbee <buzbee@google.com> | 2010-07-20 14:53:42 -0700 |
---|---|---|
committer | buzbee <buzbee@google.com> | 2010-07-21 14:50:25 -0700 |
commit | ecf8f6ede2c00350a36297dd7427afff9d9cb154 (patch) | |
tree | 6f78c5a9225efd114ba231a9a7bc9ced22265ace /vm/compiler/codegen/arm/ArchUtility.c | |
parent | e3bed18a09bc810752f50784033b9b201c0d8399 (diff) | |
download | android_dalvik-ecf8f6ede2c00350a36297dd7427afff9d9cb154.tar.gz android_dalvik-ecf8f6ede2c00350a36297dd7427afff9d9cb154.tar.bz2 android_dalvik-ecf8f6ede2c00350a36297dd7427afff9d9cb154.zip |
JIT: Support for Dalvik volatiles (issue 2781881)
Also, on SMP systems generate memory barriers.
Change-Id: If64f7c98a8de426930b8f36ac77913e53b7b2d7a
Diffstat (limited to 'vm/compiler/codegen/arm/ArchUtility.c')
-rw-r--r-- | vm/compiler/codegen/arm/ArchUtility.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/vm/compiler/codegen/arm/ArchUtility.c b/vm/compiler/codegen/arm/ArchUtility.c index 4e0df2884..2daa871ca 100644 --- a/vm/compiler/codegen/arm/ArchUtility.c +++ b/vm/compiler/codegen/arm/ArchUtility.c @@ -68,6 +68,7 @@ static void buildInsnString(char *fmt, ArmLIR *lir, char* buf, char *bufEnd = &buf[size-1]; char *fmtEnd = &fmt[strlen(fmt)]; char tbuf[256]; + char *name; char nc; while (fmt < fmtEnd) { int operand; @@ -82,6 +83,32 @@ static void buildInsnString(char *fmt, ArmLIR *lir, char* buf, assert((unsigned)(nc-'0') < 4); operand = lir->operands[nc-'0']; switch(*fmt++) { + case 'B': + switch (operand) { + case kSY: + name = "sy"; + break; + case kST: + name = "st"; + break; + case kISH: + name = "ish"; + break; + case kISHST: + name = "ishst"; + break; + case kNSH: + name = "nsh"; + break; + case kNSHST: + name = "shst"; + break; + default: + name = "DecodeError"; + break; + } + strcpy(tbuf, name); + break; case 'b': strcpy(tbuf,"0000"); for (i=3; i>= 0; i--) { |