Mercurial > hg > truffle
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 |