aboutsummaryrefslogtreecommitdiff
path: root/src/cpu/x86/vm/templateInterpreter_x86_32.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/x86/vm/templateInterpreter_x86_32.cpp')
-rw-r--r--src/cpu/x86/vm/templateInterpreter_x86_32.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/cpu/x86/vm/templateInterpreter_x86_32.cpp b/src/cpu/x86/vm/templateInterpreter_x86_32.cpp
index d7f85cf3a..dfe431a7b 100644
--- a/src/cpu/x86/vm/templateInterpreter_x86_32.cpp
+++ b/src/cpu/x86/vm/templateInterpreter_x86_32.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -713,7 +713,7 @@ address InterpreterGenerator::generate_accessor_entry(void) {
rdx,
Address::times_ptr, ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset()));
- Label notByte, notShort, notChar;
+ Label notByte, notBool, notShort, notChar;
const Address field_address (rax, rcx, Address::times_1);
// Need to differentiate between igetfield, agetfield, bgetfield etc.
@@ -728,6 +728,12 @@ address InterpreterGenerator::generate_accessor_entry(void) {
__ jmp(xreturn_path);
__ bind(notByte);
+ __ cmpl(rdx, ztos);
+ __ jcc(Assembler::notEqual, notBool);
+ __ load_signed_byte(rax, field_address);
+ __ jmp(xreturn_path);
+
+ __ bind(notBool);
__ cmpl(rdx, stos);
__ jcc(Assembler::notEqual, notShort);
__ load_signed_short(rax, field_address);