1// picoChip ASM file 2//.file "ucmpsi2.c" 3// 4// Support for 32-bit unsigned compare. 5// 6// Copyright (C) 2003-2014 Free Software Foundation, Inc. 7// Contributed by Picochip Ltd. 8// Maintained by Daniel Towner (daniel.towner@picochip.com) 9// 10// This file is free software; you can redistribute it and/or modify it 11// under the terms of the GNU General Public License as published by the 12// Free Software Foundation; either version 3, or (at your option) any 13// later version. 14// 15// This file is distributed in the hope that it will be useful, but 16// WITHOUT ANY WARRANTY; without even the implied warranty of 17// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18// General Public License for more details. 19// 20// Under Section 7 of GPL version 3, you are granted additional 21// permissions described in the GCC Runtime Library Exception, version 22// 3.1, as published by the Free Software Foundation. 23// 24// You should have received a copy of the GNU General Public License and 25// a copy of the GCC Runtime Library Exception along with this program; 26// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 27// <http://www.gnu.org/licenses/>. 28// 29// Compiled from the following, and then hand optimised. 30// 31// int __ucmpsi2 (USItype x, USItype y) 32// { 33// 34// USIunion lx; lx.l = x; 35// USIunion ly; ly.l = y; 36// 37// if (lx.s.high < ly.s.high) 38// return 0; 39// else if (lx.s.high > ly.s.high) 40// return 2; 41// if (lx.s.low < ly.s.low) 42// return 0; 43// else if (lx.s.low > ly.s.low) 44// return 2; 45// return 1; 46// } 47 48.section .text 49 50.align 8 51.global ___ucmpsi2 52___ucmpsi2: 53_picoMark_FUNCTION_BEGIN= 54// picoChip Function Prologue : &___ucmpsi2 = 0 bytes 55 SUB.0 R1,R3,r15 56 57 BLO _L1 58=-> SUB.0 R3,R1,r15 \ COPY.1 0,R5 59 60 BLO _L1 61=-> SUB.0 R0,R2,r15 \ COPY.1 2,R5 62 63 BLO _L1 64=-> SUB.0 R2,R0,r15 \ COPY.1 0,R5 65 66 BLO _L1 67=-> COPY.0 2,R5 68 69 COPY.0 1,R5 70_L1: 71 JR (R12) 72=-> COPY.0 R5,R0 // R0 := R5 73 74_picoMark_FUNCTION_END= 75// picoChip Function Epilogue : __ucmpsi2 76//============================================================================ 77// All DWARF information between this marker, and the END OF DWARF 78// marker should be included in the source file. Search for 79// FUNCTION_STACK_SIZE_GOES_HERE and FUNCTION NAME GOES HERE, and 80// provide the relevant information. Add markers called 81// _picoMark_FUNCTION_BEGIN and _picoMark_FUNCTION_END around the 82// function in question. 83//============================================================================ 84 85//============================================================================ 86// Frame information. 87//============================================================================ 88 89.section .debug_frame 90_picoMark_DebugFrame= 91 92// Common CIE header. 93.unalignedInitLong _picoMark_CieEnd-_picoMark_CieBegin 94_picoMark_CieBegin= 95.unalignedInitLong 0xffffffff 96.initByte 0x1 // CIE Version 97.ascii 16#0# // CIE Augmentation 98.uleb128 0x1 // CIE Code Alignment Factor 99.sleb128 2 // CIE Data Alignment Factor 100.initByte 0xc // CIE RA Column 101.initByte 0xc // DW_CFA_def_cfa 102.uleb128 0xd 103.uleb128 0x0 104.align 2 105_picoMark_CieEnd= 106 107// FDE 108_picoMark_LSFDE0I900821033007563= 109.unalignedInitLong _picoMark_FdeEnd-_picoMark_FdeBegin 110_picoMark_FdeBegin= 111.unalignedInitLong _picoMark_DebugFrame // FDE CIE offset 112.unalignedInitWord _picoMark_FUNCTION_BEGIN // FDE initial location 113.unalignedInitWord _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN 114.initByte 0xe // DW_CFA_def_cfa_offset 115.uleb128 0x0 // <-- FUNCTION_STACK_SIZE_GOES_HERE 116.initByte 0x4 // DW_CFA_advance_loc4 117.unalignedInitLong _picoMark_FUNCTION_END-_picoMark_FUNCTION_BEGIN 118.initByte 0xe // DW_CFA_def_cfa_offset 119.uleb128 0x0 120.align 2 121_picoMark_FdeEnd= 122 123//============================================================================ 124// Abbrevation information. 125//============================================================================ 126 127.section .debug_abbrev 128_picoMark_ABBREVIATIONS= 129 130.section .debug_abbrev 131 .uleb128 0x1 // (abbrev code) 132 .uleb128 0x11 // (TAG: DW_TAG_compile_unit) 133 .initByte 0x1 // DW_children_yes 134 .uleb128 0x10 // (DW_AT_stmt_list) 135 .uleb128 0x6 // (DW_FORM_data4) 136 .uleb128 0x12 // (DW_AT_high_pc) 137 .uleb128 0x1 // (DW_FORM_addr) 138 .uleb128 0x11 // (DW_AT_low_pc) 139 .uleb128 0x1 // (DW_FORM_addr) 140 .uleb128 0x25 // (DW_AT_producer) 141 .uleb128 0x8 // (DW_FORM_string) 142 .uleb128 0x13 // (DW_AT_language) 143 .uleb128 0x5 // (DW_FORM_data2) 144 .uleb128 0x3 // (DW_AT_name) 145 .uleb128 0x8 // (DW_FORM_string) 146.initByte 0x0 147.initByte 0x0 148 149 .uleb128 0x2 ;# (abbrev code) 150 .uleb128 0x2e ;# (TAG: DW_TAG_subprogram) 151.initByte 0x0 ;# DW_children_no 152 .uleb128 0x3 ;# (DW_AT_name) 153 .uleb128 0x8 ;# (DW_FORM_string) 154 .uleb128 0x11 ;# (DW_AT_low_pc) 155 .uleb128 0x1 ;# (DW_FORM_addr) 156 .uleb128 0x12 ;# (DW_AT_high_pc) 157 .uleb128 0x1 ;# (DW_FORM_addr) 158.initByte 0x0 159.initByte 0x0 160 161.initByte 0x0 162 163//============================================================================ 164// Line information. DwarfLib requires this to be present, but it can 165// be empty. 166//============================================================================ 167 168.section .debug_line 169_picoMark_LINES= 170 171//============================================================================ 172// Debug Information 173//============================================================================ 174.section .debug_info 175 176//Fixed header. 177.unalignedInitLong _picoMark_DEBUG_INFO_END-_picoMark_DEBUG_INFO_BEGIN 178_picoMark_DEBUG_INFO_BEGIN= 179.unalignedInitWord 0x2 180.unalignedInitLong _picoMark_ABBREVIATIONS 181.initByte 0x2 182 183// Compile unit information. 184.uleb128 0x1 // (DIE 0xb) DW_TAG_compile_unit) 185.unalignedInitLong _picoMark_LINES 186.unalignedInitWord _picoMark_FUNCTION_END 187.unalignedInitWord _picoMark_FUNCTION_BEGIN 188// Producer is `picoChip' 189.ascii 16#70# 16#69# 16#63# 16#6f# 16#43# 16#68# 16#69# 16#70# 16#00# 190.unalignedInitWord 0xcafe // ASM language 191.ascii 16#0# // Name. DwarfLib expects this to be present. 192 193.uleb128 0x2 ;# (DIE DW_TAG_subprogram) 194 195// FUNCTION NAME GOES HERE. Use `echo name | od -t x1' to get the hex. Each hex 196// digit is specified using the format 16#XX# 197.ascii 16#5f# 16#5f# 16#75# 16#63# 16#6d# 16#70# 16#73# 16#69# 16#32# 16#0# // Function name `__ucmpsi2' 198.unalignedInitWord _picoMark_FUNCTION_BEGIN // DW_AT_low_pc 199.unalignedInitWord _picoMark_FUNCTION_END // DW_AT_high_pc 200 201.initByte 0x0 // end of compile unit children. 202 203_picoMark_DEBUG_INFO_END= 204 205//============================================================================ 206// END OF DWARF 207//============================================================================ 208.section .endFile 209// End of picoChip ASM file 210