From: John Criswell
When the 'ret' instruction is executed, control flow returns back to the calling function's context. If the caller is a "call instruction, execution continues at + href="#i_call">call" instruction, execution continues at the instruction after the call. If the caller was an "invoke" instruction, execution continues at the beginning "normal" of the destination block. If the instruction @@ -2357,6 +2357,52 @@ ensures that accesses to memory mapped I/O registers occur in program order. + +
+ ++ call void (void)* %llvm.interrupt_handler (void) ++ +
+The 'llvm.interrupt_handler' intrinsic installs the specified function +as an interrupt handler for the specified interrupt. +
+ ++The first argument is the value to write to the memory mapped I/O location. +The second argument is a pointer indicating the memory address to which the +data should be written. +
+ ++The 'llvm.writeio' intrinsic writes value to the memory mapped +I/O address specified by pointer. The value must be a +first class type. However, certain architectures +may not support I/O on all first class types. For example, 32 bit processors +may only support I/O on data types that are 32 bits or less. +
+ ++This intrinsic enforces an in-order memory model for llvm.readio and +llvm.writeio calls on machines that use dynamic scheduling. Dynamically +scheduled processors may execute loads and stores out of order, re-ordering at +run time accesses to memory mapped I/O registers. Using these intrinsics +ensures that accesses to memory mapped I/O registers occur in program order. +
+ +