Changeset 739:1ae94fb1dbbd
- Timestamp:
- 10/30/08 05:16:37
(2 months ago)
- Author:
- Christian Kamm <kamm incasoftware de>
- branch:
- default
- Message:
Fix accidental double-inreg caused by shared TupleType?. Enabled inreg by default.
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r723 |
r739 |
|
| 3455 | 3455 | } |
|---|
| 3456 | 3456 | if (t->ty == Ttuple) |
|---|
| 3457 | | *pt = t; |
|---|
| | 3457 | *pt = t->syntaxCopy(); |
|---|
| 3458 | 3458 | else |
|---|
| 3459 | 3459 | *pt = t->merge(); |
|---|
| r724 |
r739 |
|
| 204 | 204 | // FIXME: struct are not passed in EAX yet |
|---|
| 205 | 205 | |
|---|
| | 206 | int n_inreg = f->reverseParams ? n - 1 : 0; |
|---|
| | 207 | Argument* arg = Argument::getNth(f->parameters, n_inreg); |
|---|
| | 208 | |
|---|
| 206 | 209 | // if there is a implicit context parameter, pass it in EAX |
|---|
| 207 | 210 | if (usesthis || usesnest) |
|---|
| 208 | 211 | { |
|---|
| 209 | 212 | f->thisAttrs |= llvm::Attribute::InReg; |
|---|
| | 213 | assert((!arg || (arg->llvmAttrs & llvm::Attribute::InReg) == 0) && "can't have two inreg args!"); |
|---|
| 210 | 214 | } |
|---|
| 211 | 215 | // otherwise check the first formal parameter |
|---|
| 212 | 216 | else |
|---|
| 213 | 217 | { |
|---|
| 214 | | int inreg = f->reverseParams ? n - 1 : 0; |
|---|
| 215 | | Argument* arg = Argument::getNth(f->parameters, inreg); |
|---|
| 216 | 218 | Type* t = arg->type->toBasetype(); |
|---|
| 217 | 219 | |
|---|
| … | … | |
| 224 | 226 | { |
|---|
| 225 | 227 | arg->llvmAttrs |= llvm::Attribute::InReg; |
|---|
| | 228 | assert((f->thisAttrs & llvm::Attribute::InReg) == 0 && "can't have two inreg args!"); |
|---|
| 226 | 229 | } |
|---|
| 227 | 230 | } |
|---|
| r730 |
r739 |
|
| 40 | 40 | -- x86 ABI support |
|---|
| 41 | 41 | X86_REVERSE_PARAMS = 1 |
|---|
| 42 | | X86_PASS_IN_EAX = 0 --disabled for now |
|---|
| | 42 | X86_PASS_IN_EAX = 1 |
|---|
| 43 | 43 | |
|---|
| 44 | 44 | -- D version - don't change these !!! |
|---|