comparison src/cpu/x86/vm/assembler_x86.hpp @ 624:337400e7a5dd

6797305: Add LoadUB and LoadUI opcode class Summary: Add a LoadUB (unsigned byte) and LoadUI (unsigned int) opcode class so we have these load optimizations in the first place and do not need to handle them in the matcher. Reviewed-by: never, kvn
author twisti
date Mon, 09 Mar 2009 03:17:11 -0700
parents 9adddb8c0fc8
children 660978a2a31a
comparison
equal deleted inserted replaced
623:9adddb8c0fc8 624:337400e7a5dd
1 /* 1 /*
2 * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. 2 * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
276 int disp() const { return _disp; } 276 int disp() const { return _disp; }
277 277
278 // Convert the raw encoding form into the form expected by the constructor for 278 // Convert the raw encoding form into the form expected by the constructor for
279 // Address. An index of 4 (rsp) corresponds to having no index, so convert 279 // Address. An index of 4 (rsp) corresponds to having no index, so convert
280 // that to noreg for the Address constructor. 280 // that to noreg for the Address constructor.
281 static Address make_raw(int base, int index, int scale, int disp); 281 static Address make_raw(int base, int index, int scale, int disp, bool disp_is_oop);
282 282
283 static Address make_array(ArrayAddress); 283 static Address make_array(ArrayAddress);
284 284
285 private: 285 private:
286 bool base_needs_rex() const { 286 bool base_needs_rex() const {
1136 1136
1137 void movsbl(Register dst, Address src); 1137 void movsbl(Register dst, Address src);
1138 void movsbl(Register dst, Register src); 1138 void movsbl(Register dst, Register src);
1139 1139
1140 #ifdef _LP64 1140 #ifdef _LP64
1141 void movsbq(Register dst, Address src);
1142 void movsbq(Register dst, Register src);
1143
1141 // Move signed 32bit immediate to 64bit extending sign 1144 // Move signed 32bit immediate to 64bit extending sign
1142 void movslq(Address dst, int32_t imm64); 1145 void movslq(Address dst, int32_t imm64);
1143 void movslq(Register dst, int32_t imm64); 1146 void movslq(Register dst, int32_t imm64);
1144 1147
1145 void movslq(Register dst, Address src); 1148 void movslq(Register dst, Address src);
1148 #endif 1151 #endif
1149 1152
1150 void movswl(Register dst, Address src); 1153 void movswl(Register dst, Address src);
1151 void movswl(Register dst, Register src); 1154 void movswl(Register dst, Register src);
1152 1155
1156 #ifdef _LP64
1157 void movswq(Register dst, Address src);
1158 void movswq(Register dst, Register src);
1159 #endif
1160
1153 void movw(Address dst, int imm16); 1161 void movw(Address dst, int imm16);
1154 void movw(Register dst, Address src); 1162 void movw(Register dst, Address src);
1155 void movw(Address dst, Register src); 1163 void movw(Address dst, Register src);
1156 1164
1157 void movzbl(Register dst, Address src); 1165 void movzbl(Register dst, Address src);
1158 void movzbl(Register dst, Register src); 1166 void movzbl(Register dst, Register src);
1159 1167
1168 #ifdef _LP64
1169 void movzbq(Register dst, Address src);
1170 void movzbq(Register dst, Register src);
1171 #endif
1172
1160 void movzwl(Register dst, Address src); 1173 void movzwl(Register dst, Address src);
1161 void movzwl(Register dst, Register src); 1174 void movzwl(Register dst, Register src);
1175
1176 #ifdef _LP64
1177 void movzwq(Register dst, Address src);
1178 void movzwq(Register dst, Register src);
1179 #endif
1162 1180
1163 void mull(Address src); 1181 void mull(Address src);
1164 void mull(Register src); 1182 void mull(Register src);
1165 1183
1166 // Multiply Scalar Double-Precision Floating-Point Values 1184 // Multiply Scalar Double-Precision Floating-Point Values