/pliant/language/generator/i386_extra1.pli
 
 1  # Copyright  Hubert Tonneau  hubert.tonneau@pliant.cx 
 2  # 
 3  # This program is free software; you can redistribute it and/or 
 4  # modify it under the terms of the GNU General Public License version 2 
 5  # as published by the Free Software Foundation. 
 6  # 
 7  # This program is distributed in the hope that it will be useful, 
 8  # but WITHOUT ANY WARRANTY; without even the implied warranty of 
 9  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 10  # GNU General Public License for more details. 
 11  # 
 12  # You should have received a copy of the GNU General Public License 
 13  # version 2 along with this program; if not, write to the Free Software 
 14  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. 
 15   
 16  scope "/pliant/language/" "/pliant/install/" 
 17  module "/pliant/install/ring2.pli" 
 18   
 19   
 20  public 
 21   
 22  constant i386_eax 0 
 23  constant i386_ecx 1 
 24  constant i386_edx 2 
 25  constant i386_ebx 3 
 26  constant i386_esp 4 
 27  constant i386_ebp 5 
 28  constant i386_esi 6 
 29  constant i386_edi 7 
 30   
 31   
 32  meta i386_register e 
 33    if e:size<>1 
 34      return 
 35    var Address cst := e:constant Int 
 36    if cst=null 
 37      return 
 38    var Link:Argument reg :> new Argument 
 39    reg locate Int argument_register 
 40    reg register := cst map Int 
 41    var Link:Argument :> new Argument 
 42    locate Int argument_local 
 43    var Link:Instruction :> new Instruction 
 44    function :> the_function i386_mov Int Int 
 45    i:arguments 'size :=' 2 
 46    i:arguments := addressof reg 
 47    i:arguments := addressof a 
 48    add i 
 49    var Str := "eax ecx edx ebx esp ebp esi edi" (cst map Int)*4 3 
 50    var Link:Str :> new Str 
 51    :=  "asm( [dq]movl %%"+r+",%0[dq] : [dq]=r[dq] ($2) : );" 
 52    gcc_inline_instructions define addressof:null addressof:s 
 53    set_result access_read