Mercurial > projects > ldc
comparison gen/functions.cpp @ 1152:521dd1626d76
Added initial support for raw LLVM inline asm.
author | Tomas Lindquist Olsen <tomas.l.olsen gmail.com> |
---|---|
date | Sat, 28 Mar 2009 06:32:06 +0100 |
parents | 3cf0066e6faf |
children | ba9d6292572a |
comparison
equal
deleted
inserted
replaced
1151:3cf0066e6faf | 1152:521dd1626d76 |
---|---|
329 Logger::println("overloaded intrinsic found"); | 329 Logger::println("overloaded intrinsic found"); |
330 fdecl->llvmInternal = LLVMintrinsic; | 330 fdecl->llvmInternal = LLVMintrinsic; |
331 DtoOverloadedIntrinsicName(tinst, tempdecl, fdecl->intrinsicName); | 331 DtoOverloadedIntrinsicName(tinst, tempdecl, fdecl->intrinsicName); |
332 fdecl->linkage = LINKintrinsic; | 332 fdecl->linkage = LINKintrinsic; |
333 ((TypeFunction*)fdecl->type)->linkage = LINKintrinsic; | 333 ((TypeFunction*)fdecl->type)->linkage = LINKintrinsic; |
334 } | |
335 else if (tempdecl->llvmInternal == LLVMinline_asm) | |
336 { | |
337 Logger::println("magic inline asm found"); | |
338 TypeFunction* tf = (TypeFunction*)fdecl->type; | |
339 if (tf->varargs != 1 || (fdecl->parameters && fdecl->parameters->dim != 0)) | |
340 { | |
341 error("invalid __asm declaration, must be a D style variadic with no explicit parameters"); | |
342 fatal(); | |
343 } | |
344 fdecl->llvmInternal = LLVMinline_asm; | |
345 fdecl->ir.resolved = true; | |
346 fdecl->ir.declared = true; | |
347 fdecl->ir.initialized = true; | |
348 fdecl->ir.defined = true; | |
349 return; // this gets mapped to a special inline asm call, no point in going on. | |
334 } | 350 } |
335 } | 351 } |
336 | 352 |
337 DtoFunctionType(fdecl); | 353 DtoFunctionType(fdecl); |
338 | 354 |