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