jack sexton jack sexton - 2 months ago 16
Swift Question

calling a function defined in assembly from swift

I know in swift it is possible to interop with c using the

@_silgen_name
attr on a function in a swift module. Is there a way to do this with a symbol defined in an assembly file? I would like to make syscalls using Swift. This is why I'm asking.

Answer

Create the bridge header.h file and put the prototype of the function in that file.

For example your assembly code:

.globl _add // make it global so that others can find this symbol
....
_add: // int add(int a, int b)
  movl %esi, %eax
  addl %edi, %eax
  ret

Then in bridging header.h file

int add(int a, int b);

OR

define this at the top of the swift module

@_silgen_name("add") func add(a: Int32, b: Int32) -> Int32

Then in swift you can use it:

let a = add(1, 2);
Comments