~random-stuff/random-stuff/reicast

« back to all changes in this revision

Viewing changes to newdc/arm_emitter/H_Branches.h

  • Committer: Stefanos Kornilios Mitsis Poiitidis
  • Date: 2013-12-28 21:28:50 UTC
  • mfrom: (8.1.19)
  • Revision ID: git-v1:f5d29677b32441c3f7870a198a1d5a8b0bdb8b9c
Merge branch 'androidui'

Conflicts:
        core/hw/pvr/spg.cpp
        core/hw/sh4/interpr/sh4_interpreter.cpp
        reicast/android/src/com/reicast/emulator/MainActivity.java

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 *      H_Branches.h
3
 
 *
4
 
 *
5
 
 */
6
 
#pragma once
7
 
 
8
 
 
9
 
 
10
 
 
11
 
namespace ARM
12
 
{
13
 
 
14
 
 
15
 
 
16
 
        inline static snat Literal(unat FnAddr)
17
 
        {
18
 
                u8* pc_addr = (u8*)EMIT_GET_PTR();
19
 
                return (snat)((snat)FnAddr - ((snat)pc_addr+8));
20
 
                //return -(snat)((pc_addr+8)-(snat)FnAddr);
21
 
        }
22
 
 
23
 
        EAPI CALL(unat FnAddr, ConditionCode CC=AL)
24
 
        {
25
 
                snat lit = Literal(FnAddr);
26
 
 
27
 
                if(0==lit) {
28
 
                        printf("Error, Compiler caught NULL literal, CALL(%08X)\n", FnAddr);
29
 
                        verify(false);
30
 
                        return;
31
 
                }
32
 
                if( (lit<-33554432) || (lit>33554428) )     // ..28 for BL ..30 for BLX
33
 
                {
34
 
                        printf("Warning, CALL(%08X) is out of range for literal(%08X)\n", FnAddr, lit);
35
 
                        // verify(false);
36
 
 
37
 
                        MOV32(IP, FnAddr, CC);
38
 
                        BLX(IP, CC);
39
 
                        return;
40
 
                }
41
 
 
42
 
                BL(lit,CC);
43
 
        }
44
 
 
45
 
 
46
 
 
47
 
        EAPI JUMP(unat FnAddr, ConditionCode CC=AL)
48
 
        {
49
 
                snat lit = Literal(FnAddr);
50
 
 
51
 
                /*if(0==lit) {
52
 
                        printf("Error, Compiler caught NULL literal, JUMP(%08X)\n", FnAddr);
53
 
                        verify(false);
54
 
                        return;
55
 
                }*/
56
 
                if( (lit<-33554432) || (lit>33554428) )     // ..28 for BL ..30 for BLX
57
 
                {
58
 
                        printf("Warning, %X is out of range for imm jump! \n", FnAddr);
59
 
                        //verify(false);
60
 
 
61
 
                        MOV32(IP, FnAddr, CC);
62
 
                        BX(IP, CC);
63
 
                        return;
64
 
                }
65
 
 
66
 
                B(lit,CC);     // Note, wont work for THUMB*,  have to use bx which is reg only !
67
 
        }
68
 
 
69
 
 
70
 
 
71
 
}
72
 
 
73
 
 
74
 
 
75