00001 #include "util.h"
00002 #include "vpr_types.h"
00003 #include "globals.h"
00004 #include "rr_graph_util.h"
00005
00006
00007
00008
00009 t_linked_edge *
00010 insert_in_edge_list(IN t_linked_edge * head,
00011 IN int edge,
00012 IN short iswitch)
00013 {
00014
00015
00016
00017
00018
00019
00020 t_linked_edge *linked_edge;
00021
00022 linked_edge = (t_linked_edge *) my_malloc(sizeof(t_linked_edge));
00023
00024 linked_edge->edge = edge;
00025 linked_edge->iswitch = iswitch;
00026 linked_edge->next = head;
00027
00028 return linked_edge;
00029 }
00030
00031 #if 0
00032 void
00033 free_linked_edge_soft(INOUT t_linked_edge * edge_ptr,
00034 INOUT t_linked_edge ** free_list_head_ptr)
00035 {
00036
00037
00038
00039
00040
00041 edge_ptr->next = *free_list_head_ptr;
00042 *free_list_head_ptr = edge_ptr;
00043 }
00044 #endif
00045
00046
00047 int
00048 seg_index_of_cblock(t_rr_type from_rr_type,
00049 int to_node)
00050 {
00051
00052
00053
00054
00055 if(from_rr_type == CHANX)
00056 return (rr_node[to_node].xlow);
00057 else
00058 return (rr_node[to_node].ylow);
00059 }
00060
00061
00062 int
00063 seg_index_of_sblock(int from_node,
00064 int to_node)
00065 {
00066
00067
00068
00069
00070
00071
00072
00073
00074 t_rr_type from_rr_type, to_rr_type;
00075
00076 from_rr_type = rr_node[from_node].type;
00077 to_rr_type = rr_node[to_node].type;
00078
00079 if(from_rr_type == CHANX)
00080 {
00081 if(to_rr_type == CHANY)
00082 {
00083 return (rr_node[to_node].xlow);
00084 }
00085 else if(to_rr_type == CHANX)
00086 {
00087 if(rr_node[to_node].xlow > rr_node[from_node].xlow)
00088 {
00089 return (rr_node[from_node].xhigh);
00090 }
00091 else
00092 {
00093 return (rr_node[to_node].xhigh);
00094 }
00095 }
00096 else
00097 {
00098 printf
00099 ("Error in seg_index_of_sblock: to_node %d is of type %d.\n",
00100 to_node, to_rr_type);
00101 exit(1);
00102 }
00103 }
00104
00105 else if(from_rr_type == CHANY)
00106 {
00107 if(to_rr_type == CHANX)
00108 {
00109 return (rr_node[to_node].ylow);
00110 }
00111 else if(to_rr_type == CHANY)
00112 {
00113 if(rr_node[to_node].ylow > rr_node[from_node].ylow)
00114 {
00115 return (rr_node[from_node].yhigh);
00116 }
00117 else
00118 {
00119 return (rr_node[to_node].yhigh);
00120 }
00121 }
00122 else
00123 {
00124 printf
00125 ("Error in seg_index_of_sblock: to_node %d is of type %d.\n",
00126 to_node, to_rr_type);
00127 exit(1);
00128 }
00129 }
00130
00131 else
00132 {
00133 printf
00134 ("Error in seg_index_of_sblock: from_node %d is of type %d.\n",
00135 from_node, from_rr_type);
00136 exit(1);
00137 }
00138 }