17655f29fabc0a12765de828914a18314382e5a35Ian Rogers/* 27655f29fabc0a12765de828914a18314382e5a35Ian Rogers * Copyright (C) 2012 The Android Open Source Project 37655f29fabc0a12765de828914a18314382e5a35Ian Rogers * 47655f29fabc0a12765de828914a18314382e5a35Ian Rogers * Licensed under the Apache License, Version 2.0 (the "License"); 57655f29fabc0a12765de828914a18314382e5a35Ian Rogers * you may not use this file except in compliance with the License. 67655f29fabc0a12765de828914a18314382e5a35Ian Rogers * You may obtain a copy of the License at 77655f29fabc0a12765de828914a18314382e5a35Ian Rogers * 87655f29fabc0a12765de828914a18314382e5a35Ian Rogers * http://www.apache.org/licenses/LICENSE-2.0 97655f29fabc0a12765de828914a18314382e5a35Ian Rogers * 107655f29fabc0a12765de828914a18314382e5a35Ian Rogers * Unless required by applicable law or agreed to in writing, software 117655f29fabc0a12765de828914a18314382e5a35Ian Rogers * distributed under the License is distributed on an "AS IS" BASIS, 127655f29fabc0a12765de828914a18314382e5a35Ian Rogers * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137655f29fabc0a12765de828914a18314382e5a35Ian Rogers * See the License for the specific language governing permissions and 147655f29fabc0a12765de828914a18314382e5a35Ian Rogers * limitations under the License. 157655f29fabc0a12765de828914a18314382e5a35Ian Rogers */ 167655f29fabc0a12765de828914a18314382e5a35Ian Rogers 177655f29fabc0a12765de828914a18314382e5a35Ian Rogers#include "asm_support_mips.S" 187655f29fabc0a12765de828914a18314382e5a35Ian Rogers 197655f29fabc0a12765de828914a18314382e5a35Ian Rogers .set noreorder 207655f29fabc0a12765de828914a18314382e5a35Ian Rogers .balign 4 217655f29fabc0a12765de828914a18314382e5a35Ian Rogers 227655f29fabc0a12765de828914a18314382e5a35Ian Rogers .extern artPortableProxyInvokeHandler 237655f29fabc0a12765de828914a18314382e5a35Ian RogersENTRY art_portable_proxy_invoke_handler 247655f29fabc0a12765de828914a18314382e5a35Ian Rogers GENERATE_GLOBAL_POINTER 257655f29fabc0a12765de828914a18314382e5a35Ian Rogers # Fake callee save ref and args frame set up, note portable doesn't use callee save frames. 267655f29fabc0a12765de828914a18314382e5a35Ian Rogers # TODO: just save the registers that are needed in artPortableProxyInvokeHandler. 277655f29fabc0a12765de828914a18314382e5a35Ian Rogers addiu $sp, $sp, -64 287655f29fabc0a12765de828914a18314382e5a35Ian Rogers .cfi_adjust_cfa_offset 64 297655f29fabc0a12765de828914a18314382e5a35Ian Rogers sw $ra, 60($sp) 307655f29fabc0a12765de828914a18314382e5a35Ian Rogers .cfi_rel_offset 31, 60 317655f29fabc0a12765de828914a18314382e5a35Ian Rogers sw $s8, 56($sp) 327655f29fabc0a12765de828914a18314382e5a35Ian Rogers .cfi_rel_offset 30, 56 337655f29fabc0a12765de828914a18314382e5a35Ian Rogers sw $gp, 52($sp) 347655f29fabc0a12765de828914a18314382e5a35Ian Rogers .cfi_rel_offset 28, 52 357655f29fabc0a12765de828914a18314382e5a35Ian Rogers sw $s7, 48($sp) 367655f29fabc0a12765de828914a18314382e5a35Ian Rogers .cfi_rel_offset 23, 48 377655f29fabc0a12765de828914a18314382e5a35Ian Rogers sw $s6, 44($sp) 387655f29fabc0a12765de828914a18314382e5a35Ian Rogers .cfi_rel_offset 22, 44 397655f29fabc0a12765de828914a18314382e5a35Ian Rogers sw $s5, 40($sp) 407655f29fabc0a12765de828914a18314382e5a35Ian Rogers .cfi_rel_offset 21, 40 417655f29fabc0a12765de828914a18314382e5a35Ian Rogers sw $s4, 36($sp) 427655f29fabc0a12765de828914a18314382e5a35Ian Rogers .cfi_rel_offset 20, 36 437655f29fabc0a12765de828914a18314382e5a35Ian Rogers sw $s3, 32($sp) 447655f29fabc0a12765de828914a18314382e5a35Ian Rogers .cfi_rel_offset 19, 32 457655f29fabc0a12765de828914a18314382e5a35Ian Rogers sw $s2, 28($sp) 467655f29fabc0a12765de828914a18314382e5a35Ian Rogers .cfi_rel_offset 18, 28 477655f29fabc0a12765de828914a18314382e5a35Ian Rogers sw $a3, 12($sp) 487655f29fabc0a12765de828914a18314382e5a35Ian Rogers .cfi_rel_offset 7, 12 497655f29fabc0a12765de828914a18314382e5a35Ian Rogers sw $a2, 8($sp) 507655f29fabc0a12765de828914a18314382e5a35Ian Rogers .cfi_rel_offset 6, 8 517655f29fabc0a12765de828914a18314382e5a35Ian Rogers sw $a1, 4($sp) 527655f29fabc0a12765de828914a18314382e5a35Ian Rogers .cfi_rel_offset 5, 4 537655f29fabc0a12765de828914a18314382e5a35Ian Rogers # Begin argument set up. 547655f29fabc0a12765de828914a18314382e5a35Ian Rogers sw $a0, 0($sp) # place proxy method at bottom of frame 557655f29fabc0a12765de828914a18314382e5a35Ian Rogers move $a2, rSELF # pass Thread::Current 567655f29fabc0a12765de828914a18314382e5a35Ian Rogers jal artPortableProxyInvokeHandler # (Method* proxy method, receiver, Thread*, SP) 577655f29fabc0a12765de828914a18314382e5a35Ian Rogers move $a3, $sp # pass $sp 587655f29fabc0a12765de828914a18314382e5a35Ian Rogers lw $ra, 60($sp) # restore $ra 597655f29fabc0a12765de828914a18314382e5a35Ian Rogers jr $ra 607655f29fabc0a12765de828914a18314382e5a35Ian Rogers addiu $sp, $sp, 64 # pop frame 617655f29fabc0a12765de828914a18314382e5a35Ian Rogers .cfi_adjust_cfa_offset -64 627655f29fabc0a12765de828914a18314382e5a35Ian RogersEND art_portable_proxy_invoke_handler 637655f29fabc0a12765de828914a18314382e5a35Ian Rogers 64468532ea115657709bc32ee498e701a4c71762d4Ian RogersUNIMPLEMENTED art_portable_resolution_trampoline 65468532ea115657709bc32ee498e701a4c71762d4Ian RogersUNIMPLEMENTED art_portable_to_interpreter_bridge 66